簡體   English   中英

用循環中的字符替換對象名稱

[英]Replacing an object name with characters in a loop

我是 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")

並循環遍歷數據名稱(紅色、橙色、黃色、綠色、藍色)並將值分配給“w”?

您不想將這些作為單獨的變量(請參閱此處: 將數據排除在變量名稱之外)。

一種選擇是將它們保存在一個列表中,並使用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")

最后一個操作的替代方法(在大型數據集上恰好要快得多)是使用group_by並從 dplyr 包中進行summarize

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM