我想创建一个新列,它等于我数据框中几个变量(列)的平均值。但是,我担心我不能使用'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)`
?谢谢!
答案 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])