从数据帧列表中创建数据帧名称的矢量
我有一个数据帧列表,我想创建一个包含满足特定条件的数据帧名称的字符向量。在这种情况下,我需要包含至少一个观察值的数据帧的名称。我需要将这些名称放在一个向量中,以便稍后在另一个函数中使用。从数据帧列表中创建数据帧名称的矢量
数据帧列表由分割函数自动创建。对于重复性,这里的数据帧的列表:
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”)。
谢谢!
如果你想这是有些自动化的,比如你有大量在您的环境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"
你的第二行和第三行相当于'names(mylist)[sapply(mylist,nrow)> 0]'。 – lmo
是的,谢谢;这也是为了重用用户的代码。 – agenis
使用“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"
谢谢!问题是我有超过250个数据帧。是否有一种简单的方法为每个数据框分配一个名称,而不必键入“df1 = df1 .... df250 = df250”? (我意识到这是超出了原始问题的范围,但快速搜索没有产生有益的结果。) – user3780463
如果列表已经创建,那么你可以这样做: 'names(mylist)
你必须提供您与名称dataframes的列表。 – Abdou
这里有一个选项'lapply(Filter(length,mylist),name)' – akrun
可能的重复https://stackoverflow.com/questions/44944307/get-the-names-of-data-frames-from-a-列表/ 44944323#44944323 – akrun