2017-07-06 146 views
1

我有一個數據幀列表,我想創建一個包含滿足特定條件的數據幀名稱的字符向量。在這種情況下,我需要包含至少一個觀察值的數據幀的名稱。我需要將這些名稱放在一個向量中,以便稍後在另一個函數中使用。從數據幀列表中創建數據幀名稱的矢量

數據幀列表由分割函數自動創建。對於重複性,這裏的數據幀的列表:

df1 <- data.frame(replicate(2,sample(0:1,5,rep=TRUE))) 
df2 <- data.frame(replicate(2,sample(0:1,5,rep=TRUE))) 
df3 <- data.frame(replicate(0,sample(0:1,5,rep=TRUE))) #empty 

mylist <- list(df1, df2,df3) #create list of data frames 

mylist2 <- mylist[sapply(mylist, function(x) dim(x)[1]) > 0] #subset list so that df's with no observations are dropped 

現在,我需要的是在mylist2數據幀的名稱的字符向量。 (在本例中,「df1」和「df2」)。

謝謝!

+0

你必須提供您與名稱dataframes的列表。 – Abdou

+0

這裏有一個選項'lapply(Filter(length,mylist),name)' – akrun

+0

可能的重複https://stackoverflow.com/questions/44944307/get-the-names-of-data-frames-from-a-列表/ 44944323#44944323 – akrun

回答

0

如果你想這是有些自動化的,比如你有大量在您的環境data.frames的,你可能想用一個模式匹配來選擇它們一條線:

mylist = do.call("list", mget(grep("df", ls(), value=T))) 
mylist2 <- mylist[sapply(mylist, function(x) dim(x)[1]) > 0] 

這將創建具有在其名稱中「DF」,同時保持自己的名字作爲列表元素的屬性都data.frames第一個列表。

然後我申請的過濾器1元data.frames,您只需檢索名稱:

names(mylist2) 
#### [1] "df1" "df2" 
+1

你的第二行和第三行相當於'names(mylist)[sapply(mylist,nrow)> 0]'。 – lmo

+0

是的,謝謝;這也是爲了重用用戶的代碼。 – agenis

+0

使用「grep」的模式匹配起作用。謝謝! – user3780463

0

您需要有一個命名列表。這裏是你如何能做到這一點:

library(dplyr) 
library(purrr) 

mylist <- list(df1 = df1, df2 = df2, df3 = df3) 

test <- mylist %>% 
    map_int(nrow) 

test[test > 0] %>% names() 
#[1] "df1" "df2" 
+0

謝謝!問題是我有超過250個數據幀。是否有一種簡單的方法爲每個數據框分配一個名稱,而不必鍵入「df1 = df1 .... df250 = df250」? (我意識到這是超出了原始問題的範圍,但快速搜索沒有產生有益的結果。) – user3780463

+0

如果列表已經創建,那麼你可以這樣做: 'names(mylist)< - paste0(「df」, 1L:length(mylist))' –