在另一个数据帧的列中按索引拆分数据帧

时间:2017-10-11 15:19:52

标签: r for-loop

我在另一个名为“index”的数据框中创建了一个索引

I1 I2 I3 ...
1  3  5
2  4  6 
3  5  7

我想将其他数据框分组,并将每个结果存储为单独的数据框

column_name_from_index <- main_df[index[,i], ]

所以最终的结果是我将main_df索引为索引列,输出是数据帧I1,I2,I3等等。我不愿意分裂我的结果(我现在不是在抓住列名,但我想建议如何做到这一点。)

s <- seq(1,30)
df <- main_df[FALSE, ] #creates an empty dataframe into which I can put all columns from main_df.

for(i in s){
df <- main_df[index[,i], ]
df[i, ]
}

1 个答案:

答案 0 :(得分:0)

如果您使用list而不是单独的数据框,这将更加明确。正如Jaap所示,lapply对此很容易,我们可以命名结果:

index = data.frame(I1 = 1:3, I2 = 3:5)
main_df = data.frame(x = 1:6, y = 2:7)

result = lapply(index, function(i) main_df[i, ])
names(result) = names(index)
result
# $I1
#   x y
# 1 1 2
# 2 2 3
# 3 3 4
# 
# $I2
#   x y
# 3 3 4
# 4 4 5
# 5 5 6

您可以按号码或名称访问各个数据框,例如result[["I2"]]result[[2]]。请参阅How to make a list of data frames?,详细了解为什么这比单个数据框更好(还有将列表转换为特殊顽固或自虐的个别数据框的提示)。