4

我想生成一个新变量,它的某些列满足标准的次数(如==, <, >)。该函数需要处理NA

具有一些缺失值的样本数据:

x <- seq(10, 20)
y <- seq(12, 22)
y[4] <- NA
z <- seq(14, 24)
z[c(4,5)] <- NA
data <- cbind(x, y, z)
#        x  y  z
# [1,]  10 12 14
# [2,]  11 13 15
# [3,]  12 14 16
# [4,]  13 NA NA
# [5,]  14 16 NA
# [6,]  15 17 19
# [7,]  16 18 20
# [8,]  17 19 21
# [9,]  18 20 22
# [10,] 19 21 23
# [11,] 20 22 24

在这个例子中,我想要的是一个变量,“less16”,它总结了每行中的值的数量< 16,跨列“x”、“y”和“z”。前几行的期望结果:

 x   y   z  less16
10  12  14       3
11  13  15       3
12  14  16       2
13  NA  NA       1
14  16  NA       1
etc

我已经尝试使用and循环rowSum, sum, which,到目前为止都无济于事。任何建议将不胜感激。提前致谢。forifelse

4

2 回答 2

8

rowSums有论据na.rm

data$less16 <- rowSums(data < 16, na.rm = TRUE)
于 2012-04-13T03:31:39.357 回答
6

许多这些函数实际上都有一个na.rm用于排除NA值的参数:

apply(data,1,function(x) {sum(x < 16,na.rm = TRUE)})
于 2012-04-13T03:24:37.780 回答