r - 是否可以根据条件从不同的数据框中估算多个值?

标签 r dataframe dplyr

假设我有以下数据框...

# Starting dataframe
data <- tribble(
  ~ID, ~Excluded, ~colA, ~colB, ~colC, ~col_mean, ~varA, ~varB,
  "A", TRUE,      1,     1,     1,     1,         "X",   10,
  "B", FALSE,     NA,    2,     2,     NA,        "Y",   20,
  "C", FALSE,     3,     3,     3,     3,         "Z",   30
)

还有一个子集数据框(即存在较少的观察值),其中缺失值已被估算,例如...

# Dataframe with imputed values
data_imputed <- tribble(
  ~ID, ~Excluded, ~colA, ~colB, ~colC, ~col_mean, ~varA, ~varB,
  "B", FALSE,     2,     2,     2,     2,         "Y",   20,
  "C", FALSE,     3,     3,     3,     3,         "Z",   30
)

当特定列(例如 col_mean)有缺失值时,如何用估算数据框中的值替换原始数据框中的值?

注意:我不想用估算数据框中的行替换整行,只是一组指定的列(例如,在本例中,那些以“col”开头的列)。

目标数据框看起来像这样......

# Target dataframe
data <- tribble(
  ~ID, ~Excluded, ~colA, ~colB, ~colC, ~col_mean, ~varA, ~varB,
  "A", TRUE,      1,     1,     1,     1,         "X",   10,
  "B", FALSE,     2,     2,     2,     2,         "Y",   20,
  "C", FALSE,     3,     3,     3,     3,         "Z",   30
)

我试图用这张图来总结问题...

enter image description here

我需要为四组或五组列执行此操作,因此我可以在其中指定条件(例如 is.na(col_mean))和要使用的列(使用正则表达式)让事情变得更简单。

我倾向于使用 tidyverse,因此首选使用 tidyverse 语法的代码。

最佳答案

您可以使用 dplyr 中的 rows_ 系列。在这种情况下,rows_patch() 运行良好。它通过一些关键列(即 ID)修改现有行,但仅覆盖 NA 值。

library(dplyr)

rows_patch(data, data_imputed, by = "ID")

# # A tibble: 3 × 8
#   ID    Excluded  colA  colB  colC col_mean varA   varB
#   <chr> <lgl>    <dbl> <dbl> <dbl>    <dbl> <chr> <dbl>
# 1 A     TRUE         1     1     1        1 X        10
# 2 B     FALSE        2     2     2        2 Y        20
# 3 C     FALSE        3     3     3        3 Z        30

关于r - 是否可以根据条件从不同的数据框中估算多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74731530/

相关文章:

python - 时间序列数据框中的横截面权重

r - 如何根据 r 中的其他变量更新变量的信息?

r - 对一个向量应用多个函数

python - 为什么 Python 和 R 有两个不同的归一化结果

r - 如何在所有其他代码块之后强制 Knitr 评估\Sexpr

r - 如何使用 R 中的 purrr 映射在 janitor::tabyl 中设置变量名称

r - 将子集列粘贴在一起

python - Groupby 两列和一列行的比较

r - 使用 dplyr 跨列求和 NA

r - 在dplyr的链接操作中切片向量