用循环中的字符替换对象名称

时间:2017-01-18 22:12:00

标签: r

我是SAS的新手。我会在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'?

1 个答案:

答案 0 :(得分: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))