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

Ian Strang hamamelis at ntlworld.com
Tue Nov 22 21:39:27 CET 2011

```I think, here is the solution. If NA is included in read.table list the row
becomes a factor:
\$ Q21: Factor w/ 3 levels " 1"," 2"," NA": 1 2 3 2 2. This will not work
with rowSums.
If I put the missing value as a blank, then it is still read as NA but the
whole row is considered as an integer and OK for rowSums etc.
A missing value in col Q00 will be interpreted as a row with one less value
at the end, I think.
Ian

+ yy <- read.table( header = T, sep=",", text =
+ "Q00, Q20, Q21, Q22, Q23, Q24
+  0, 0, 1, 2, 3, 4
+  0, 1, 2, 3, 4, 5
+  0, 0, NA, 3, 4, 5
+  0, 1, 2, 3, 4, 5
+  0, 1, 2, 3, 4, 5")
+  yy
Q00 Q20 Q21 Q22 Q23 Q24
1   0   0   1   2   3   4
2   0   1   2   3   4   5
3   0   0  NA   3   4   5
4   0   1   2   3   4   5
5   0   1   2   3   4   5
+ str(yy)
'data.frame': 5 obs. of  6 variables:
\$ Q00: int  0 0 0 0 0
\$ Q20: int  0 1 0 1 1
\$ Q21: Factor w/ 3 levels " 1"," 2"," NA": 1 2 3 2 2
\$ Q22: int  2 3 3 3 3
\$ Q23: int  3 4 4 4 4
\$ Q24: int  4 5 5 5 5

+ yy <- read.table( header = T, sep=",", text =
+ "Q00, Q20, Q21, Q22, Q23, Q24
+  0, 0, 1, 2, 3, 4
+  0, 0, , 3, 4, 5
+  0, 1, 2, 3, 4, 5")
+  yy
Q00 Q20 Q21 Q22 Q23 Q24
1   0   0   1   2   3   4
2   0   0  NA   3   4   5
3   0   1   2   3   4   5
+ str(yy)
'data.frame': 3 obs. of  6 variables:
\$ Q00: int  0 0 0
\$ Q20: int  0 0 1
\$ Q21: int  1 NA 2
\$ Q22: int  2 3 3
\$ Q23: int  3 4 4
\$ Q24: int  4 5 5
+ x <- transform( yy,                                        ############
Example 6
+    mySum   = rowSums(yy[ ,c("Q00","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("Q00","Q20","Q21","Q23")], na.rm=T)
+  )
+ x
Q00 Q20 Q21 Q22 Q23 Q24 mySum myCount   myMean
1   0   0   1   2   3   4     4       3 1.000000
2   0   0  NA   3   4   5     4       2 1.333333
3   0   1   2   3   4   5     7       3 1.750000

```