如何解决突变行总和,但仅当NA计数为2或更小时
我正在尝试突变5列数据的新变量(总和),但仅当受影响列(v2至v6)的NA计数为2或更小时,否则返回NA。下面的代码仅在不存在NA的情况下进行求和。帮助表示赞赏。
df <- data.frame(v1=c("A","B","C","D","E","F"),v2=c(4,NA,5,6,NA),v3=c(7,8,9,v4=c(NA,3,1,4),v5=c(NA,v6=c(NA,4))
df
library(dplyr)
df = df %>%
rowwise() %>%
mutate(sum(v2,v3,v4,v5,v6))
df
解决方法
在基数R中,我们可以使用rowSums
两次,第一个用于计数每行中值的总和,第二个用于计算R中NA
的数量。
ifelse(rowSums(is.na(df[-1])) <= 2,rowSums(df[-1],na.rm = TRUE),NA)
#[1] NA 17 29 NA 3 NA
按行使用dplyr
可以做到:
library(dplyr)
df %>%
rowwise() %>%
mutate(col = ifelse(sum(is.na(c_across(v2:v6))) <= 2,sum(c_across(v2:v6),NA))
# A tibble: 6 x 7
# v1 v2 v3 v4 v5 v6 col
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 A 4 7 NA NA NA NA
#2 B NA 8 3 3 3 17
#3 C 5 9 5 5 5 29
#4 D 6 NA NA NA NA NA
#5 E NA NA 1 1 1 3
#6 F NA NA 4 NA 4 NA
使用@rpolicastro的ifelse
建议缩短了代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。