首页 文章

计算dplyr中每行的非NA数值的数量

提问于
浏览
1

我创建了一个数据帧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= ... )

如果有人能帮助我,我感激不尽 .

1 回答

  • 2

    使用 select is.na rowSumsselect(., -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
    

相关问题