我想通过将每个响应/列除以它的组平均值来计算相对响应值。 我已经设法产生了一个详尽(因此不令人满意)的方法。我的数据集非常大,包含多个组和响应。按组划分列(在数据框中分组)
###############
# example
# used packages
require(plyr)
# sample data
group <- c(rep("alpha", 3), rep("beta", 3), rep("gamma", 3))
a <- rnorm(9, 10,1) #some random data as response
b <- rnorm(9, 10,1)
df <- data.frame(group, a, b)
# my approach
# means for each group and response
df.means <- ddply(df, "group", colwise(mean))
# clunky method
df$rel.a[df$group=="alpha"] <-
df$a[df$group=="alpha"]/df.means$a[df.means$group=="alpha"]
df$rel.a[df$group=="beta"] <-
df$a[df$group=="beta"]/df.means$a[df.means$group=="beta"]
# ... etc
df$rel.b[df$group=="gamma"] <-
df$b[df$group=="gamma"]/df.means$b[df.means$group=="gamma"]
#desired outcome (well, perhaps with no missing values)
df
###############
我一直在使用r一段时间,但我仍然努力与琐碎的数据处理程序。我相信我一定会错过一些东西,我怎样才能更好地解决这些问题?
由于我的职位是ambigously指出:@大卫的方法通过使用data.table(根据我的代码解决方案)docendo的方法转换整个数据帧添加列通过使用dplyr(基于我的问题的解决方案) – EfEx