假设我有以下数据框...
# 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
)
我试图用这张图来总结问题...
我需要为四组或五组列执行此操作,因此我可以在其中指定条件(例如 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/