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

问题描述 投票:0回答:2

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

任何帮助表示赞赏。

r list dataframe
2个回答
0
投票

所有数据框可以组合成一个,然后在trial_optin上拆分

df <- rbind(df1, df2, df3, df4, df5, df6)
split(x = df, f = df$trial_option)

0
投票

每当您需要对数据帧拆分执行处理时,请考虑bytapply的面向对象的包装器。虽然类似于split在通过一个或多个因子创建子集dfs的命名列表时,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)   
© www.soinside.com 2019 - 2024. All rights reserved.