R-将数据框的行追加到另一行,而“主键列”上没有重复

时间:2018-08-22 15:12:58

标签: r dataframe dplyr key

我必须使用数据帧(A和B)。 B包含新值,A包含过时的值。

每个数据框的一列代表键,另一列代表值。

我想将B中的行添加到A,然后清除包含A中重复键的行(使用B中的新值更新A)。顺序并不重要,我认为在其他顺序中更容易:清理重复项然后追加。


此刻,我已经完成了这个脚本:

A <- bind_rows(B, A)
A <- A[!duplicated(A),]

我遇到的问题是它不能清除行,因为它们不是真正的重复项(值不同)。

我该如何处理?

1 个答案:

答案 0 :(得分:2)

这只是预感,因为没有提供示例数据,但是我怀疑合并比行绑定更安全:

data.table解决方案

GetKey()

1-重命名变量以准备合并

library(data.table)

2-合并,请确保使用setnames(A, old="value", new="value_A") setnames(B, old="value", new="value_B") arg

all

3-使用一些规则进行更新-例如:使用dt <- merge(A, B, by="key", all=TRUE) 除非丢失,否则使用value_B

value_A

使用Base R的解决方案

dt[ , value := value_B]
dt[is.na(value), value := value_A]

dplyr / tidyverse解决方案

names(A) <- c("key", "value_A")
names(B) <- c("key", "value_B")

df <- merge(A, B, by="key", all=TRUE)

df$value <- df$value_B
df[is.na(df$value), "value"] <- df[is.na(df$value), "value_A"]

示例数据

library(dplyr)

df <- full_join(A, B, by="key") %>% 
      mutate(value = ifelse(is.na(value_B), value_A, value_B))