使用 dplyr 或其他解决方案从另一个 data.frame 更新 data.frame 的几行和几列

Update few rows and columns of data.frame from another data.frame using dplyr or other solution

假设我有以下 data.frames:

library(dplyr)
set.seed(13)
df <- data_frame(A = sample(letters[1:2], 6, rep=TRUE), B = sample(1:3, 6, rep = TRUE))
new_df <- data_frame(A ="a", B = 4)

假设我想用值 4 更新 df 的所有行,其中 A == "a" (这是一个例子,一般来说 df 有不止一个排)。我可以通过以下方式做到这一点:

df %>% left_join(new_df %>% rename(b=B)) %>% mutate(B = ifelse(is.na(b), B, b)) 

很好,但这看起来不优雅。有一个更好的方法吗?

我在清理数据时遇到了这个问题。我从另一列计算某些列,这应该是唯一的 id,但由于数据收集问题,它不是。我有另一个 table 具有正确的 ID,我想更新它们。与正确 ID 的数量相比,通常不正确的 ID 数量较少,因此加入似乎有点矫枉过正。

它不需要 dplyr 但是怎么样:

df$B <- ifelse (df$A=="a",4,df$B)

好吧,如果您正在寻找优雅(和快速)的方法,可以通过以下方式就地替换这些值:

library(data.table)

dt = as.data.table(df) # alternatively call setDT to convert in-place
setkey(dt, A)

dt[new_df, B := i.B]
dt
#   A B
#1: a 4
#2: a 4
#3: a 4
#4: a 4
#5: b 2
#6: b 2

两个注意事项。您会收到警告,因为 data.table 对类型非常小心,并且您的两个表的类型不匹配。第二个注意事项 - i. 确保您使用 i-expressionB 列,即 [.data.table 的第一个参数,并用于解决此处的冲突。