从数据框列表中创建数据框名称的向量

时间:2017-07-06 15:30:39

标签: r list dataframe

我有一个数据框列表,我想创建一个包含符合特定条件的数据框名称的字符向量。在这种情况下,我想要包含至少1个观察的数据帧的名称。我需要在向量中使用这些名称,以便稍后在另一个函数中使用。

数据框列表由split函数自动创建。为了重现性,这里有一个数据框列表:

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中数据帧名称的字符向量。 (在这个例子中,&#34; df1&#34;和&#34; df2&#34;。)

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您希望在某种程度上实现自动化,例如您的环境中有大量的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,同时将其名称保留为列表元素的属性。

然后我将过滤器应用于单元素data.frames,您只需检索名称:

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

答案 1 :(得分: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"