2017-10-11 251 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?瞭解爲什麼這比個別數據框更好(但也包括將列表轉換爲單個數據框以用於特別固執或受虐)的技巧。