1

我有一个列名的字符数组(chr [1:5]命名keynn),我想对其执行聚合。数组的所有元素都是数据框的有效列名 ( mydata),但它是字符串而不是变量(“YEAR”而不是mydata$YEAR)。

我尝试使用get()从名称中返回列,它适用于第一个元素,如下所示:

attach(mydata)
aggregate(mydata, by=list(get(keynn, .GlobalEnv)), FUN=length)

我尝试使用 mget(),因为我的数组作为多个元素,如下所示:

attach(mydata)
aggregate(mydata, by=list(mget(keynn, .GlobalEnv)), FUN=length)

但我收到一个错误:

value for 'YEAR' not found.

如何获得相当于 get 的多个列的聚合依据?

谢谢!

4

1 回答 1

2

我建议attach一般不要使用

如果您只是想从中获取列,mydata则可以使用[索引列表

aggregate(mydata, by = mydata[keynn], FUN = length)

应该工作——并且很清楚你想从中得到keynn什么mydata

使用的问题attach是它添加mydata到搜索路径(不复制到全局环境)

尝试

 attach(mydata)
 mget(keynn, .GlobalEnv)

所以如果你要使用mgetand attach,你需要

 mget(keynn, .GlobalEnv, inherits = TRUE)

这样它就不会只在全球环境中搜索。

但这比付出更多的努力(恕我直言)

有效的原因getinherits = TRUE默认情况下。因此,您可以使用lapply(keynn, get)if mydatawere attached ,但同样丑陋且不清楚它在做什么。


另一种方法是使用data.table,它将评估相关by数据表中的参数

 library(data.table)

 DT <- data.table(mydata)

 DT[, {what you want to aggregate} , by =keynn]

请注意,keynn 不需要是名称的字符向量,它可以是名称列表或名称函数的命名列表等

于 2013-03-08T00:58:43.123 回答