我有一个时间序列为(x,y)坐标的数据框列表。每个数据框还有一个特定的变量 - trial_option
- 我想用它将我的数据帧列表拆分成多个较小的列表。每个较小的列表将包含具有一个trial_option
因子的所有数据帧。
df1 <- data.frame(x = runif(10, -10, 10), y = runif(10, -10, 10), trial_option = rep("A", 10))
df2 <- data.frame(x = runif(10, -10, 10), y = runif(10, -10, 10), trial_option = rep("A", 10))
df3 <- data.frame(x = runif(10, -10, 10), y = runif(10, -10, 10), trial_option = rep("B", 10))
df4 <- data.frame(x = runif(10, -10, 10), y = runif(10, -10, 10), trial_option = rep("B", 10))
df5 <- data.frame(x = runif(10, -10, 10), y = runif(10, -10, 10), trial_option = rep("C", 10))
df6 <- data.frame(x = runif(10, -10, 10), y = runif(10, -10, 10), trial_option = rep("C", 10))
mylist <- list(df1 = df1, df2 = df2, df3 = df3, df4 = df4, df5 = df5, df6 = df6)
所以我想将mylist
分成3个较小的列表:mylistA, mylistB, mylistC
。
我以为我可以使用small_list <- lapply(list, subset, trial_option == A)
并为每个trial_option执行此操作,但这并没有返回我想要的内容。我也想重复一遍,因为每次试验都会很乏味而且不是很好的做法。我还没有通过谷歌搜索找到合适的答案。
此外,一旦我有了这些子集列表,我就会进行一些数据争论,然后我想将这些较小的列表全部组合成一个大的列表。 trial_option
数据帧的每个子集都需要完成单独的数据争用,因此我想分割主列表。
感谢任何帮助。
答案 0 :(得分:0)
所有数据框可以合并为一个,然后在trial_optin
上拆分df <- rbind(df1, df2, df3, df4, df5, df6)
split(x = df, f = df$trial_option)
答案 1 :(得分:0)
每当您需要对数据帧拆分执行处理时,请考虑by
面向对象的tapply
包装器。虽然在通过一个或多个因素创建子集dfs的命名列表时与split
类似,但by
允许您在没有任何lapply
或for
循环的情况下进一步处理每个子集df。
mylist <- list(df1 = df1, df2 = df2, df3 = df3, df4 = df4, df5 = df5, df6 = df6)
complete_df <- do.call(rbind, mylist)
# NAMED LIST OF DFS (NAMES ARE UNIQUE VALUES OF trial_option: A, B, C)
by_list <- by(complete_df, complete_df$trial_option, FUN=function(d) {
# DATA WRANGLING WHERE PARAMETER, d, IS SUBSETTED DATAFRAME
d ...
# RETURN A DATAFRAME AFTER PROCESSING
return(new_d)
})
# ROW BIND ALL DF ELEMENTS (ASSUMES EACH HAVE SAME colnames() AND ncol())
new_complete_df <- do.call(rbind, by_list)