我希望仅对var1:var6
列中缺失值少于2个的行,将var1:var6
列中的缺失值替换为零。然后我想重新计算sum列(我可以很高兴地使用rowwise()
作为我的reprex)。
我已经尝试了一些事情使用across()
,或rowwise()
和c_across()
,但我努力找到一个解决方案。
library(tidyverse)
# Generate data
set.seed(40)
dat <- tibble(
id = 1:6,
var1 = sample(c(0:4, NA), 6, replace = TRUE),
var2 = sample(c(0:4, NA), 6, replace = TRUE),
var3 = sample(c(0:4, NA), 6, replace = TRUE),
var4 = sample(c(0:4, NA), 6, replace = TRUE),
var5 = sample(c(0:4, NA), 6, replace = TRUE),
var6 = sample(c(0:4, NA), 6, replace = TRUE),
) %>%
mutate(sum = rowSums(across(var1:var6)))
这是当前的tibble:
> dat
# A tibble: 6 × 8
id var1 var2 var3 var4 var5 var6 sum
<int> <int> <int> <int> <int> <int> <int> <int>
1 1 3 4 4 NA NA 2 NA
2 2 NA NA 4 3 4 2 NA
3 3 4 4 1 1 4 1 15
4 4 1 2 4 4 4 NA NA
5 5 2 1 4 4 NA 2 NA
6 6 1 3 1 0 0 4 9
我希望输出看起来像这样:
> new_dat
# A tibble: 6 × 8
id var1 var2 var3 var4 var5 var6 sum
<int> <int> <int> <int> <int> <int> <int> <int>
1 1 3 4 4 NA NA 2 NA
2 2 NA NA 4 3 4 2 NA
3 3 4 4 1 1 4 1 15
4 4 1 2 4 4 4 0 15
5 5 2 1 4 4 0 2 13
6 6 1 3 1 0 0 4 9
3条答案
按热度按时间bhmjp9jg1#
你可以像这样使用
across
:vbkedwbf2#
要使用
rowwise()
最小限度地调整代码,可以将sum()
中的参数na.rm
设置为灵活的逻辑值,以指示该行的缺失值是否少于2个。6jjcrrmo3#
如果NA最多出现一次,则将其转换为0。然后像往常一样获取rowSums: