从数据帧列表中创建数据帧名称的矢量

问题描述:

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

数据帧列表由分割函数自动创建。对于重复性,这里的数据帧的列表:

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

如果你想这是有些自动化的,比如你有大量在您的环境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

您需要有一个命名列表。这里是你如何能做到这一点:

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)