繁体   English   中英

如何通过匹配R中的一个列值来用另一个数据帧替换数据帧值?

[英]How to replace the data frame value with another data frame by matching one column value in R?

假设我有一个像这样的数据帧A:

index value1 value2
a      ss    aa
b      dd    ff
c      gg    hh
d      yy    zz
e      cc    xx

另一个像这样的数据帧B:

index value1 value2
c      oooo  pppp
d      uuuu  vvvv

我希望将A替换为B值并更改为

index value1 value2
a      ss    aa
b      dd    ff
c      oooo  pppp
d      uuuu  vvvv
e      cc    xx

您可以例如:

rbind(
  A[!A$index %in% B$index, ],
  merge(A[, "index", drop = FALSE], B)
)
#    index value1 value2
# 1      a     ss     aa
# 2      b     dd     ff
# 5      e     cc     xx
# 11     c   oooo   pppp
# 21     d   uuuu   vvvv

我们可以做一个连接on “索引”

library(data.table)
setDT(A)[B, names(A)[-1] := mget(paste0("i.", names(B)[-1])), on = .(index)]
A
#   index value1 value2
#1:     a     ss     aa
#2:     b     dd     ff
#3:     c   oooo   pppp
#4:     d   uuuu   vvvv
#5:     e     cc     xx

注意:假设“值”列是character而不是factor

数据

A <- structure(list(index = c("a", "b", "c", "d", "e"), value1 = c("ss", 
"dd", "gg", "yy", "cc"), value2 = c("aa", "ff", "hh", "zz", "xx"
)), .Names = c("index", "value1", "value2"), class = "data.frame", 
 row.names = c(NA, -5L))

B <- structure(list(index = c("c", "d"), value1 = c("oooo", "uuuu"
 ), value2 = c("pppp", "vvvv")), .Names = c("index", "value1", 
"value2"), class = "data.frame", row.names = c(NA, -2L))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM