r - 多列的逐行计数
问题描述
您好我正在尝试计算数据框中多列的值
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)
解决方案
不要使用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
推荐阅读
- r - 检查日期是否在查找表的范围内
- functional-programming - Dart 中的 yield 示例
- java - 我的每个 JSONfunction 相关程序突然发生同样的错误是 NullPointerException 我如何解决它?
- python - 是否可以使用 Flask 和 Socket.io 使用实时数据更新我的动态网页?
- collections - 如果您有对象的循环引用,则不再从执行线程中引用它
- mysql - Mysql Dump : count() 参数必须是实现可数对象的数组
- css - 样式表 style.css 未加载,因为其 MIME 类型“text/plain”不是“text/css”
- javascript - 在反应本机应用程序中使用 AWS Amplify 在 GraphQL 突变中出错
- parallel-processing - cuda的多线程for循环
- python-3.x - 在 wxPython 中创建自定义菜单栏类