我创建了一个数据帧df。
df <- data.frame (id = 1:10,
var1 = 10:19,
var2 = sample(c(1:2,NA), 10, replace=T),
var3 = sample(c(3:5, NA), 10, replace=T))
我需要的是一个新的列var4,它计算每行的非NA值的数量(不包括id列)。因此,例如,如果行类似于var1 = 19,var2 = 1,var3 = NA,则var4 = 2。我在dplyr找不到一个好方法。 类似的东西:
df %in% mutate(var4= ... )
我很感激有人可以帮助我。
答案 0 :(得分:2)
使用select
+ is.na
+ rowSums
,select(., -id)
返回排除了.
的原始数据框(id
),然后计算rowSums(!is.na(...))
的非NA值的数量:
df %>% mutate(var4 = rowSums(!is.na(select(., -id))))
# id var1 var2 var3 var4
#1 1 10 NA 4 2
#2 2 11 1 NA 2
#3 3 12 2 5 3
#4 4 13 2 NA 2
#5 5 14 1 NA 2
#6 6 15 1 NA 2
#7 7 16 1 5 3
#8 8 17 NA 4 2
#9 9 18 NA 4 2
#10 10 19 NA NA 1