如何从列表中获取数据框的名称?当然,get()
获取对象本身,但我想让它的名字在另一个函数中使用。这是用例,如果你想建议一个解决方法:
lapply(somelistOfDataframes, function(X) {
ddply(X, .(idx, bynameofX), summarise, checkSum = sum(value))
})
每个数据框中都有一列与列表中的数据框同名。我怎样才能得到这个名字bynameofX
? names(X)
将返回整个向量。
编辑:这是一个可重复的例子:
df1 <- data.frame(value = rnorm(100), cat = c(rep(1,50),
rep(2,50)), idx = rep(letters[1:4],25))
df2 <- data.frame(value = rnorm(100,8), cat2 = c(rep(1,50),
rep(2,50)), idx = rep(letters[1:4],25))
mylist <- list(cat = df1, cat2 = df2)
lapply(mylist, head, 5)
答案 0 :(得分:5)
我会以这种方式使用列表的名称:
dat1 = data.frame()
dat2 = data.frame()
l = list(dat1 = dat1, dat2 = dat2)
> str(l)
List of 2
$ dat1:'data.frame': 0 obs. of 0 variables
$ dat2:'data.frame': 0 obs. of 0 variables
然后使用lapply + ddply,如:
lapply(names(l), function(x) {
ddply(l[[x]], c("idx", x), summarise,checkSum = sum(value))
})
如果没有可重现的答案,这仍未经过测试。但它应该帮助你朝着正确的方向发展。
EDIT(ran2):这是使用可重现示例的代码。
l <- lapply(names(mylist), function(x) {
ddply(mylist[[x]], c("idx", x), summarise,checkSum = sum(value))
})
names(l) <- names(mylist); l
答案 1 :(得分:1)
您可以首先使用名称(列表) - &gt; list_name然后使用list_name [1],list_name [2]等来获取每个列表名称。 (如果列表名称是数字,则可能还需要as.numeric(list_name [x])。
答案 2 :(得分:1)
这是dplyr等价物
library(dplyr)
catalog =
data_frame(
data = someListOfDataframes,
cat = names(someListOfDataframes)) %>%
rowwise %>%
mutate(
renamed =
data %>%
rename_(.dots =
cat %>%
as.name %>%
list %>%
setNames("cat")) %>%
list)
catalog$renamed %>%
bind_rows(.id = "number") %>%
group_by(number, idx, cat) %>%
summarize(checkSum = sum(value))