【问题标题】:Replacing an object name with characters in a loop在循环中用字符替换对象名称
【发布时间】:2017-01-18 22:11:59
【问题描述】:

我是 SAS 的 R 新手。我会在 SAS 中使用全局宏变量来完成此操作,但尚未在 R 中找到方法。我想弄清楚如何使用循环或其他 R 功能,通过替换对象名称(即字符)以及将名称附加到附加文本('.sum')来简化我的代码。如果我从下面的代码开始:

RED.sum <- aggregate(y ~ x, data = RED, FUN = "mean")
ORANGE.sum <- aggregate(y ~ x, data = ORANGE, FUN = "mean")
YELLOW.sum <- aggregate(y ~ x, data = YELLOW, FUN = "mean")
GREEN.sum <- aggregate(y ~ x, data = GREEN, FUN = "mean")
BLUE.sum <- aggregate(y ~ x, data = BLUE, FUN = "mean")

我用什么可以简化为一行通用代码:

w.sum <- aggregate(y ~ x, data = w, FUN = "mean")

并循环遍历数据名称(RED、ORANGE、YELLOW、GREEN、BLUE),将值分配给“w”?

【问题讨论】:

  • 将所有 data.frames 放在一个列表中。然后你就可以一步完成了
  • OR rbind 将所有数据帧合并为一个数据,其中一个唯一的 id 列表示它属于哪个数据。然后执行group_by并总结
  • 如果您希望我们帮助您,请添加示例数据!

标签: r


【解决方案1】:

您不想将这些作为单独的变量(请参阅此处:keep data out of your variable names)。

一种选择是将它们保存在一个列表中,并使用lapply 对每个应用相同的功能:

lst <- list(RED, ORANGE, YELLOW, GREEN, BLUE)

sums <- lapply(lst, function(w) aggregate(y ~ x, data = w, FUN = "mean"))

但是,如果数据集在其他方面相似,您可能应该将它们组合到一个带有color 列的表中。例如:

combined <- rbind(cbind(RED, color = "Red"),
                  cbind(ORANGE, color = "Orange"),
                  cbind(YELLOW, color = "Yellow"))

aggregate(y ~ x + color, data = combined, FUN = "mean")

最后一个操作的替代方法(在大型数据集上恰好要快得多)是使用 dplyr 包中的 group_bysummarize

library(dplyr)
combined %>%
  group_by(x, color) %>%
  summarize(y = mean(y))

【讨论】:

  • 非常有帮助;感谢您在链接中提供其他信息以及各种选项。
猜你喜欢
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 2016-10-26
  • 2014-12-14
  • 1970-01-01
相关资源
最近更新 更多