2017-10-11 144 views
-1

我已经创建了另一个数据帧的索引的列称为“指数”分割数据帧由指数在另一个数据帧

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, ] 
} 
+2

'lapply(index,function(i)main_df [i,])'? – Jaap

+0

无论如何,它总是很好给一个[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610)。在你的情况下,包括'main_df'的示例数据(或者'dput(main_df)'的输出)以及所需的输出将大大有利于你的问题。 – Jaap

回答

0

如果使用list而不是单独的数据帧,这将更加有用。正如夏侯显示,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?了解为什么这比个别数据框更好(但也包括将列表转换为单个数据框以用于特别固执或受虐)的技巧。