假设我有以下数据框......
# 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
)
Run Code Online (Sandbox Code Playgroud)
以及一个子集数据框(即存在较少的观察值),其中缺失值已被估算,例如......
# 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
)
Run Code Online (Sandbox Code Playgroud)
当特定列(例如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
)
Run Code Online (Sandbox Code Playgroud)
我试图用这个图总结问题......
我需要对四组或五组列执行此操作,因此我可以指定条件(例如is.na(col_mean))和要使用的列(使用正则表达式)会使事情变得更容易。
我倾向于使用 tidyverse,因此首选使用 tidyverse 语法的代码。
你可以使用rows_来自 的家庭dplyr。在这种情况下,rows_patch()效果很好。它通过一些关键列(即ID)修改现有行,但仅覆盖NA值。
library(dplyr)\n\nrows_patch(data, data_imputed, by = "ID")\n\n# # A tibble: 3 \xc3\x97 8\n# ID Excluded colA colB colC col_mean varA varB\n# <chr> <lgl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>\n# 1 A TRUE 1 1 1 1 X 10\n# 2 B FALSE 2 2 2 2 Y 20\n# 3 C FALSE 3 3 3 3 Z 30\nRun Code Online (Sandbox Code Playgroud)\n