R:使用 tidyverse 将 NA 替换为 df 中的其他变量

标签 r tidyverse

我想用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,

谢谢!

最佳答案

非常好的问题。谢谢!

我们在这里使用:

  1. rowSums 添加一列,其中包含 X1-X3 的行总和
  2. 然后我们 mutate across 所有 X
  3. coalesce 每个 XrowSum1
  4. 令人惊讶的是,rowSum1 列因为不需要而消失了 ->
  5. 这是由于 mutate
  6. 的奇妙的 .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/

相关文章:

r - 将变量粘贴到 mutate_at 函数中以改变特定列(如果存在)

r - 通过交叉检查 R tidyverse 中的两列来连接两个表

python - 如何避免 Pandas DataFrame 中过多的 lambda 函数分配和应用方法链

r - 无法使用标量调用 Rcpp 的阶乘函数

r - 在 R 中从头开始计算自相关函数

r - 带有长文本、项目符号和特定表格宽度的表格

r - 是什么导致了这个错误?由于奇点而未定义系数

r - 使用 rgl grid3d 补全缺失的行

r - 比较数据框中的所有行并有条件地应用函数

sql - dplyr:row_number()不适用于sql表(SQLite)