r - 按行计算给定列中的 NA

标签 r dplyr

我想按行计算选定列中的 NA 并将结果保存在新列中。我想用 mutate() 来实现这一点函数来自 dplyr
它应该如何工作:

loop for each row i in test{
test$SUM <-sum(is.na(test[i,1:2]))
test$SUM2 <-sum(is.na(test[i,3:4]))
test$SUM3 <-sum(is.na(test[i,5:6]))
}

使用的数据:
test<-data.frame(
BIEZ_01 = c(59000, 61462, NA, 33000, 30840, 36612), 
BIEZ_02 = c(5060, 55401, 33000, 33000, 30840, 28884), 
BIEZ_03 = c(NA, 60783, 20000, 20000, NA, 19248), 
BIEZ_04 = c(22100, 59885, 15000, 15000, 20840, 10000), 
BIEZ_05 = c(NA, 59209, 15000, 15000, 20840, NA), 
BIEZ_06 = c(4400, 6109, NA, 500, 10840, 10000))

最佳答案

另外一个选项

NA.counts <- sapply(split(seq(ncol(test)), ceiling(seq(ncol(test))/2))
                    , function(x) rowSums(is.na(test[, x])))

如果您想使用 tidyverse添加您可以执行的列
library(tidyverse)
test %>% 
  cbind(NA.counts = map(seq(ncol(test)) %>% split(ceiling(./2))
                        , ~rowSums(is.na(test[, .]))))


#   BIEZ_01 BIEZ_02 BIEZ_03 BIEZ_04 BIEZ_05 BIEZ_06 NA.counts.1 NA.counts.2 NA.counts.3
# 1   59000    5060      NA   22100      NA    4400           0           1           1
# 2   61462   55401   60783   59885   59209    6109           0           0           0
# 3      NA   33000   20000   15000   15000      NA           1           0           1
# 4   33000   33000   20000   15000   15000     500           0           0           0
# 5   30840   30840      NA   20840   20840   10840           0           1           0
# 6   36612   28884   19248   10000      NA   10000           0           0           1

正如@Moody_Mudskipper 指出的那样,cbind如果要修改数据框,则不需要。您可以添加列
test[paste0("SUM",seq(ncol(test)/2))] <- map(seq(ncol(test)) %>% split(ceiling(./2)), 
                                             ~rowSums(is.na(test[.])))

关于r - 按行计算给定列中的 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50680413/

相关文章:

r - 无法预测R中的线性模型

r - R 中 13 个行索引之间的欧氏距离的排列

r - 导入多个 csv 文件并为每个文件添加年份

r - ggplot2 直方图 scale_fill_gradient 不适用于连续变量

r - 在 R 中安装 Cairo 包的错误消息

emacs - 开发 Sweave 文档的建议

R 质量保证技术

r - 如何将可变数量的连接标签的列拆分为每个标签一列?

r - 如何使 purrr invoke_map 与闭包一起工作

r - 如何按组为所有数据添加特定值?