【问题标题】:R Aggregate with a yet undefined range of columns (including factors)R聚合尚未定义的列范围(包括因子)
【发布时间】:2020-11-10 14:18:25
【问题描述】:

我可能错过了使用搜索功能找到答案的正确词。我将有一个列数未知的数据集,因为它们是另一个程序中的工作函数,以后更改将更改数据集中变量的数量。但是,该数据集结构清晰,开头有 6 个变量(包括下面提到的 code、一个因子变量和 year,从第 7 列开始所有其他变量是其他程序中工作的函数(MaxQDA)。

所以我希望有一个灵活的调用 7 到 N 列聚合函数替换以下代码中的点,据我了解,这需要所有列。

dataset2 <- aggregate(. ~ code+jahr, 
                   data = dataset, 
                   sum, 
                   na.action=na.pass
)

here 的建议无济于事,因为我不知道如何将 code+jahr 转换为其他建议的聚合函数编写变体。

附录:或者,换一种说法:我希望从聚合函数中排除一些列,同时总结一系列其他列。

由于对向量类型存在混淆。我有一些因素数据,如 ID 和名称。数据看起来像这样

set.seed(42)
test2 <- as.data.frame(matrix(sample(16 * 4, replace=TRUE), ncol=16, nrow=4))
code <-c("aaa", "bbb","aaa", "ddd")
jahr <- c("1990", "1993", "2007", "2020")
id <- c("id1", "id2", "id3", "id4")
Name <- c("bla", "bla2", "bla3", "bla4")
test <- data.frame(code, jahr, id, Name)
dataset <- data.frame(test, test2)
dataset[1:4] <- lapply(dataset[, 1:4], as.factor)

【问题讨论】:

  • 你能用.[,7:n] 调用所有的列吗?也许是n &lt;- ncol(dataset)的序言?
  • 第一个建议给了我:“评估错误(predvars,数据,环境):对象'。'未找到”。第二个建议也一样。即使我尝试将 n 设为数字。

标签: r aggregate


【解决方案1】:

使用上面的dataset,我们希望从聚合中删除idName,因为它们是不用于定义组的因素。最简单的方法是提取这些数据列:

dataset2 <- aggregate(. ~ code+jahr, data = dataset[ , -(3:4)], sum, na.action=na.pass)

一个稍微复杂一点的方法是定义一个逻辑语句来标识那些是因子但不用于分组的列。主要优点是不必计算列号,并且更改分组变量相对简单:

keep <- colnames(dataset) %in% c("code", "jahr") | sapply(dataset, is.numeric)
dataset2 <- aggregate(. ~ code+jahr, data = dataset[, keep], sum, na.action=na.pass)

两者产生相同的结果

【讨论】:

  • 您好,谢谢!这不起作用,因为它将我的因素变成了字符,这是函数不允许的,并给出以下错误: FUN(X[[i]], ...) 中的错误:无效的“类型”(字符)争论。但是,将“cols”作为 data.frame 也不起作用,“model.frame.default 中的错误(formula = cols ~ code + jahr, data = datI, : invalid type (list) for variable 'cols'”跨度>
  • 除了定义子集的因素外,您没有提及数据中的因素。您必须从aggregate 中排除任何未用于对数据进行子集化的因素。如果您需要可以首先测试的建议,请提供您的数据样本。
  • 我不知道,上课会是个问题。查看现在添加到我的原始帖子中的测试数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2018-05-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2017-02-21
相关资源
最近更新 更多