首页 > 解决方案 > 多列的逐行计数

问题描述

您好我正在尝试计算数据框中多列的值

date = c('2020-01-01','2020-01-02','2020-01-03','2020-01-04')
a= c(1,NA,1,NA)
b= c(1,0,1,NA)
c = c(NA,NA,0,NA)
df = data.frame(date,a,b,c)

我尝试使用下面的代码来计算所有 3 列中的值的数量

df$tot_cnt =  rowSums(df[,c('a','b','c')], na.rm=TRUE)

我正在寻找类似的输出

tot_cnt = c(2,1,3,NA)
df = data.frame(date,a,b,c,tot_cnt)

标签: r

解决方案


不要使用rowSums(). 最好通过指定为边距来使用apply()行。1这是应该按照您的要求执行的代码:

date = c('2020-01-01','2020-01-02','2020-01-03','2020-01-04')
a= c(1,NA,1,NA)
b= c(1,0,1,NA)
c = c(NA,NA,0,NA)
df = data.frame(date,a,b,c)

counts = apply(df[ , 2:4], 1, function(x) sum(!is.na(x)) )
counts[ which( counts == 0 )] = NA_integer_
df$tot_cnt = counts
> df
        date  a  b  c tot_cnt
1 2020-01-01  1  1 NA       2
2 2020-01-02 NA  0 NA       1
3 2020-01-03  1  1  0       3
4 2020-01-04 NA NA NA      NA

推荐阅读