我有一个数据框列表,我想创建一个包含符合特定条件的数据框名称的字符向量。在这种情况下,我想要包含至少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;。)
谢谢!
答案 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"