如何在列表中获取data.frame的名称?

Mat*_*ert 7 indexing r plyr lapply

如何从列表中获取数据框的名称?当然,get()获取对象本身,但我希望在另一个函数中使用它的名称.这是用例,如果你想建议一个解决方法:

lapply(somelistOfDataframes, function(X) {
    ddply(X, .(idx, bynameofX), summarise, checkSum = sum(value))
})
Run Code Online (Sandbox Code Playgroud)

每个数据框中都有一列与列表中的数据框同名.我怎么能得到这个名字bynameofXnames(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)
Run Code Online (Sandbox Code Playgroud)

Pau*_*tra 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
Run Code Online (Sandbox Code Playgroud)

然后使用lapply + ddply,如:

lapply(names(l), function(x) {
    ddply(l[[x]], c("idx", x), summarise,checkSum = sum(value))
  })
Run Code Online (Sandbox Code Playgroud)

如果没有可重复的答案,这仍然是未经测试的.但它应该帮助你朝着正确的方向前进.

编辑(ran2):这是使用可重现的示例的代码.

l <- lapply(names(mylist), function(x) {
ddply(mylist[[x]], c("idx", x), summarise,checkSum = sum(value))
})
names(l) <- names(mylist); l
Run Code Online (Sandbox Code Playgroud)

  • `llply(mylist,.fun = ddply,c(2,3),summarize,checkSum = sum(value))`也可以,但可能更令人困惑 (2认同)