改变行总和,但前提是 NA 计数为 2 或更小
Mutate row sum but only if NA count is 2 or less
我正在尝试改变 5 列数据的新变量(总和),但前提是受影响列(v2 到 v6)的 NA 计数为 2 或更少,否则 return 为 NA。下面的代码仅在没有 NA 的情况下求和。感谢帮助。
df <- data.frame(v1=c("A","B","C","D","E","F"), v2=c(4,NA,5,6,NA,NA), v3=c(7,8,9,NA,NA,NA),
v4=c(NA,3,5,NA,1,4), v5=c(NA,3,5,NA,1,NA), v6=c(NA,3,5,NA,1,4))
df
library(dplyr)
df = df %>%
rowwise() %>%
mutate(sum(v2, v3, v4, v5, v6))
df
在 base 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
row-wise 你可以这样做:
library(dplyr)
df %>%
rowwise() %>%
mutate(col = ifelse(sum(is.na(c_across(v2:v6))) <= 2,
sum(c_across(v2:v6), na.rm = TRUE), 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
建议缩短了代码。
我正在尝试改变 5 列数据的新变量(总和),但前提是受影响列(v2 到 v6)的 NA 计数为 2 或更少,否则 return 为 NA。下面的代码仅在没有 NA 的情况下求和。感谢帮助。
df <- data.frame(v1=c("A","B","C","D","E","F"), v2=c(4,NA,5,6,NA,NA), v3=c(7,8,9,NA,NA,NA),
v4=c(NA,3,5,NA,1,4), v5=c(NA,3,5,NA,1,NA), v6=c(NA,3,5,NA,1,4))
df
library(dplyr)
df = df %>%
rowwise() %>%
mutate(sum(v2, v3, v4, v5, v6))
df
在 base 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
row-wise 你可以这样做:
library(dplyr)
df %>%
rowwise() %>%
mutate(col = ifelse(sum(is.na(c_across(v2:v6))) <= 2,
sum(c_across(v2:v6), na.rm = TRUE), 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
建议缩短了代码。