根据每个数据帧中的因子将数据帧列表拆分为多个列表

时间:2018-03-01 17:33:42

标签: r list dataframe

我有一个时间序列为(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数据帧的每个子集都需要完成单独的数据争用,因此我想分割主列表。

感谢任何帮助。

2 个答案:

答案 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允许您在没有任何lapplyfor循环的情况下进一步处理每个子集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)   
相关问题