2017-03-01 17 views
0

給定具有唯一列名稱的數據幀列表,最終目標是提取那些列按順序與每個數據幀匹配條件的行。例如:具有不同列名稱和多個選擇的數據幀列表上的子集

Sp1<-c("Elm","Maple","Oak") 
Sp2<-c("Elm", "Aspen", "Oak") 
Height1<-c(2,4,6) 
Height2<-c(4,6,8) 
Site_1<-data.frame(Sp1,Height1) 
Site_2<-data.frame(Sp2,Height2) 
Tree_List<-list(Site_1=Site_1,Site_2=Site_2) 

現在開始,我知道,如果我執行下面的代碼將返回所需的輸出爲單一選擇:

subset(Tree_List[[1]], Tree_List[[1]][1]=="Elm") 

我也知道,我可以提取所需的輸出多項選擇,如果我通過其特定的名稱要求列:

subset(Tree_List[[1]], Sp1 %in% c("Elm","Oak")) 

因爲我遍歷這個有用於遍歷所有的數據幀在相同的第n列清單赭但不同的列名我的嘗試是:

subset(Tree_List[[1]], Tree_List[[1]][1] %in% c("Elm","Oak")) 

這不幸返回

<0 rows> (or 0-length row.names) 

,而不是期望的輸出的輸出。有什麼想法嗎?

回答

1

我們可以超過data.frame的list做到這一點使用lapply循環和子集

lapply(Tree_List, function(x) x[x[,1] %in% c("Elm", "Oak"),]) 

關於OP的代碼的問題,Tree_List[[1]][1]仍然是一個data.frame有一列。我們需要提取列作爲vector

subset(Tree_List[[1]], Tree_List[[1]][,1] %in% c("Elm","Oak")) 
# Sp1 Height1 
#1 Elm  2 
#3 Oak  6 
相關問題