我是R的新手。我有一个数据框,其中包含45种类型项目的开始和结束值,我使用dplyr将数据子集为45个单独的数据帧。我编写了一个for循环,该循环为数据帧的每一行输出从头到尾的序列。我想在所有数据帧上使用此循环,而不必复制和粘贴代码45次并将其调整为每个数据帧的名称。参见以下示例:
A_list <- list()
B_list <- list()
C_list <- list()
dfA <- data.frame(name = c("A", "A"), start = c(1, 3), end = c(6, 5))
dfB <- data.frame(name = c("B", "B"), start = c(2, 1), end = c(7, 8))
dfC <- data.frame(name = c("C", "C"), start = c(1, 2), end = c(4, 7))
for(i in seq_along(dfA$start)) {
output <- seq.int(dfA$start[i], dfA$end[i])
A_list[[i]] <- output
}
我尝试列出每个数据框的名称列表,然后在for循环中引用它,但这没有用。
list_df_names <- list(dfA, dfB, dfC)
seq.int(list_df_names[1:3]$start[i], list_df_names[1:3]$end[i])
是否有人对如何执行此操作有任何想法?
我们的数据集的列表循环,然后创建一个“开始”,“结束”列之间的序列Map
具有list
的list
秒。如果需要创建单独的对象(不建议使用),请list2env
在设置带有首选对象名称names
的嵌套list
对象后使用
out <- lapply(list_df_names, function(x) Map(seq.int, x$start, x$end))
names(out) <- paste0(c('A', 'B', 'C'), "_list")
list2env(out, .GlobalEnv)
-输出
A_list
#[[1]]
#[1] 1 2 3 4 5 6
#[[2]]
#[1] 3 4 5
B_list
#[[1]]
#[1] 2 3 4 5 6 7
#[[2]]
#[1] 1 2 3 4 5 6 7 8
C_list
#[[1]]
#[1] 1 2 3 4
#[[2]]
#[1] 2 3 4 5 6 7
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句