# [R] Adding two or more columns of a data frame for each row when NAs are present.

Ian Strang hamamelis at ntlworld.com
Mon Nov 21 13:02:55 CET 2011

```Hi,
Thanks, your method does indeed work. Thank you.
Last night, I worked out something similar and found out about rowMeans as
well.
Kind wishes,
Ian

"Q20, Q21, Q22, Q23, Q24
0,1, 2,3,4
1,NA,2,3,4
2,1, 2,3,4
5,NA,3,NA,NA")
yy
Q20 Q21 Q22 Q23 Q24
1   0   1   2   3   4
2   1  NA   2   3   4
3   2   1   2   3   4
4   5  NA   3  NA  NA
+ yy
yy
x
+  x <- transform( yy,
+   mySum   = rowSums(yy[ ,c("Q20","Q21","Q23")], na.rm=T),
+   myCount =
as.numeric(!is.na(Q20))+as.numeric(!is.na(Q21))+as.numeric(!is.na(Q24)),
+   myMean  = rowMeans(yy[ ,c("Q20","Q21","Q23")], na.rm=T)
+ )
+ x
Q20 Q21 Q22 Q23 Q24 mySum myCount   myMean
1   0   1   2   3   4     4       3 1.333333
2   1  NA   2   3   4     4       2 2.000000
3   2   1   2   3   4     6       3 2.000000
4   5  NA   3  NA  NA     5       1 5.000000
>

However, if there is NA in first column read then rowSums gives an error.
I think that is what is happening. How do I solve that?

+ "Q20, Q21, Q22, Q23, Q24
+  0,1, 2,3,4
+  1,NA,2,3,4
+  NA,1, 2,3,4
+  5,NA,3,NA,NA")
+  yy

Q20 Q21 Q22 Q23 Q24
1   0   1   2   3   4
2   1  NA   2   3   4
3  NA   1   2   3   4
4   5  NA   3  NA  NA
+ rm(x)
+  x <- transform( yy,                                        ############
Example 6
+   mySum   = rowSums(yy[ ,c("Q20","Q21","Q23")], na.rm=T),
+   myCount =
as.numeric(!is.na(Q20))+as.numeric(!is.na(Q21))+as.numeric(!is.na(Q24)),
+   myMean  = rowMeans(yy[ ,c("Q20","Q21","Q23")], na.rm=T)
+ )
Error in rowSums(yy[, c("Q20", "Q21", "Q23")], na.rm = T) :
'x' must be numeric
Calls: transform -> transform.data.frame -> eval -> eval -> rowSums
> yy

```