我想用tidyverse替换我df中的NA值,我想要的值应该从其他cols中计算出来:
输入:
ID, X1, X2, X3,
"A", 0.96, NA, 0.97,
"B", 1.00, NA, 1.01,
"C", 0.98, 0.03, NA,
"A", 1.00, NA, 1.00,
"D", NA, 0.05, 0.99,
我的愿望是在每一行中找到所有三个 X1, X2, X3
中的哪个变量是 NA 并用其他两个变量的总和来计算它
输出:
ID, X1, X2, X3,
"A", 0.96, 1.93, 0.97,
"B", 1.00, 2.01, 1.01,
"C", 0.98, 0.03, 1.01,
"A", 1.00, 2.00, 1.00,
"D", 1.04, 0.05, 0.99,
谢谢!
最佳答案
非常好的问题。谢谢!
我们在这里使用:
rowSums
添加一列,其中包含 X1-X3 的行总和- 然后我们
mutate
across
所有X
和 coalesce
每个X
与rowSum1
- 令人惊讶的是,
rowSum1
列因为不需要而消失了 -> - 这是由于
mutate
的奇妙的
.keep="unused"
参数
library(tidyverse)
df %>%
mutate(rowsum1 = rowSums(select(., starts_with("X")), na.rm=TRUE)) %>%
mutate(across(starts_with("X"), ~coalesce(.,rowsum1)),.keep="unused")
输出:
ID X1 X2 X3
<chr> <dbl> <dbl> <dbl>
1 A 0.96 1.93 0.97
2 B 1 2.01 1.01
3 C 0.98 0.03 1.01
4 A 1 2 1
5 D 1.04 0.05 0.99
关于R:使用 tidyverse 将 NA 替换为 df 中的其他变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67849882/