如何改变数据框中某些行的平均值

时间:2017-10-08 09:50:50

标签: r dplyr mean mutate

我想创建一个新列,它等于我数据框中几个变量(列)的平均值。但是,我担心我不能使用'rowMeans',因为我不想平均所有变量。而且,我不愿意手动输入所有变量名(很多)。例如:

m_res->getInt64("datum");
m_res->getUInt64("datum");

我想改变一个名为avg的行,它只是变量a,b,c,d和e的平均值。因为在我的数据集中,变量名称是长的(和复杂的),并且有超过10个变量,我不想逐个输出它们。所以我想我可能需要使用dplyr包和mutate函数??你能为我提出一个聪明的方法吗?

以下内容是在您的意见和答案建议之后添加的。再次感谢大家:

实际上,我需要的列名是Mcheck5_1_1,Mcheck5_2_1,...,Mcheck5_8_1(所以总共有8个)。但是,我试过了 my_data <- data.frame(a = c(1,2,3), b = c(4,5,6), c = c(10,10,10), d = c(13,24,81), e = c(10, 8, 6), hello = c(1,-1,1), bye = c(1,5,5)) 但是给我一个错误:

my_data$avg = rowMeans(select(my_data, Mcheck5_1_1:Mcheck5_8_1), na.rm = TRUE)

现在我使用以下代码解决了这个问题:

Error in select(my_data, Mcheck5_1_1:Mcheck5_8_1) : 
unused argument (Mcheck5_1_1:Mcheck5_8_1)

但有更优雅的方式吗?或者为什么我不能使用`idx = grep("Mcheck5_1_1", names(my_data)) my_data$avg = rowMeans(my_data[, idx:idx+7], na.rm = TRUE)` ?谢谢!

1 个答案:

答案 0 :(得分:0)

我会做这样的事情

my_data <- data.frame(a = c(1,2,3), b = c(4,5,6), c = c(10,10,10), d = c(13,24,81),
                      e = c(10, 8, 6), hello = c(1,-1,1), bye = c(1,5,5))

several_variables <- c('a', 'b', 'c', 'd', 'e') #3 or `letters[1:5]`
my_data$avg <- rowMeans(my_data[,several_variables])
my_data
#>   a b  c  d  e hello bye  avg
#> 1 1 4 10 13 10     1   1  7.6
#> 2 2 5 10 24  8    -1   5  9.8
#> 3 3 6 10 81  6     1   5 21.2

显然,如果变量位于某个固定位置,并且您知道它们将保留在那里,您可以使用带编号的索引作为suggested by Jaap

my_data$avg <- rowMeans(my_data[,1:5])