gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:19:46 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com