我想按行计算选定列中的 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/