编写适用于多个现有数据帧的R函数

时间:2014-02-16 17:09:10

标签: r function dataframe

我正在开发一个R-Script,我必须为多个现有数据帧创建多个变量。例如:我得到了三个数据帧AAA,BBB和CCC,每个数据帧都有一个名为“height”的列。我想得到这个:

AAA_Skal <- mean(AAA$height) / 6
BBB_Skal <- mean(BBB$height) / 6
CCC_Skal <- mean(CCC$height) / 6

没有实际为每个数据帧编写整行代码。 (这样做的原因是我得到的不只是3个数据帧,我必须用它们来处理很多代码)。

我尝试的是以下内容:

dfs <- c("AAA", "BBB", "CCC")

Skal <- function(x) {
sprintf("%s_Skal", dfs[x]) <- mean(sprintf("%s_$height", dfs[x])) / 6
}

然后我应该能够输入Skal(1)来获取

AAA_Skal <- mean(AAA$height) / 6

首先我认为它不起作用,因为sprintf将“AAA”作为输出,带引号。所以我尝试了as.name(sprintf()),但它也做了很多工作。我希望有人可以在这个问题上帮助我,对不起我的英语不好。

1 个答案:

答案 0 :(得分:3)

您可以使用assignget

AAA <- data.frame(x = letters[1:10], height = rnorm(10))
BBB <- data.frame(y = sample(20:60, 10), height = rnorm(10, 5))
CCC <- data.frame(z = rbinom(10, 5, .2), height = rnorm(10, 50))

dfs <- c("AAA", "BBB", "CCC")

x <- 1
assign(sprintf("%s_Skal", dfs[x]), mean(get(dfs[x])$height) / 6)
AAA_Skal
## [1] -0.02807432

但我建议将data.frames存储在列表中,以便您可以执行类似

的操作
l <- list(AAA, BBB, CCC)
sapply(l, function(x) mean(x$height) / 6 )
## [1] -0.02807432  0.84785430  8.38655123