我是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'?
答案 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_by
和summarize
:
library(dplyr)
combined %>%
group_by(x, color) %>%
summarize(y = mean(y))