创建一个新列,该新列是数据框中非相邻行的平均值

时间:2019-02-02 12:48:56

标签: r

我对R非常陌生。我在调查表中有多列变量与不同的问题答案相关。我希望在数据框中生成一个新列,该列是上述所有变量的平均值。我已经看到rowMeans可以用于此目的,但这似乎仅适用于相邻列,但我要平均的列不相邻。我还希望对如何处理丢失的数据进行一些控制。我使用

创建了示例数据
Var1<- c(1.5, 2.3, NA, NA, 2.3, 3.3)
Var2<- c(1.7, 2.2, 4.7, 13.3, 1.7, 1.5)
Var3<- c(5.1, 6.7, 3.4, 5.5, NA, 8.7)
Var4<- c(4.5, 5.4, NA, 4.5, 5.4, 8.9)

哪个给

  Var1 Var2 Var3 Var4
1  1.5  1.7  5.1  4.5
2  2.3  2.2  6.7  5.4
3  NA   4.7  3.4  NA
4  NA   13.3  5.5  4.5
5  2.3  1.7  NA  5.4
6  3.3  1.5  8.7  8.9

因此,我想在此数据框中创建一个新列或变量,该变量或变量是Var1,Var2和Var4(而不是Var3)的平均值。如果缺少其中一个变量的数据,我还希望它仍然产生剩余数据的平均值,但是如果其中两列的数据丢失,我希望它在新列中返回NA。因此,对于第3个人,新列将为NA,但对于第4个人和第5个人,将产生这三列中可用值的平均值。

我希望这是有道理的,对我们的帮助非常感谢

2 个答案:

答案 0 :(得分:2)

我们可以通过子集数据集,使用rowSums检查所选列的NA数。如果大于1,则返回NA,否则返回1。然后,用rowMeans获得所选列的mean行,并将NA大于1的行更改为NA

# column index 
ind <- c(1, 2, 4)    
i1 <- NA^(rowSums(is.na(df1[ind])) > 1)
df1$newCol <- rowMeans(df1[ind], na.rm = TRUE) * i1

数据

df1 <- data.frame(Var1, Var2, Var3, Var4)

答案 1 :(得分:1)

给..

df1 <- data.frame(Var1, Var2, Var3, Var4)

一个解决方案是..

df1$newCol <- apply(df1[,-3],1,function(x){ifelse(sum(is.na(x))>1,NA,mean(x,na.rm=T))})