我有一个数据框列表,其中包含(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
数据帧的每个子集都需要完成单独的数据争用,因此我想分割主列表。
任何帮助表示赞赏。
所有数据框可以组合成一个,然后在trial_optin上拆分
df <- rbind(df1, df2, df3, df4, df5, df6)
split(x = df, f = df$trial_option)
每当您需要对数据帧拆分执行处理时,请考虑by
是tapply
的面向对象的包装器。虽然类似于split
在通过一个或多个因子创建子集dfs的命名列表时,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)