假设我有:

T1 <- c("A","B","C","D","E", "M")
T2 <- c("F","G","H","I","J", "K")
score1 <- c(1,2,3,4,5, 6)
score3 <- c(7,8,9,10,11, 12)
score2 <- c(13, 14, 15, 16, 17, 18)
df1 <- data.frame(T2, T1, score1, score2, score3)

T1 <- c("A","D","C","B","K")
T2 <- c("f","g","h","i","j")
score1 <- c(-1,-2,-3,-4,-5)
score2 <- c(-13, -14, -15, -16, -17)
df2 <- data.frame(T1, T2, score1, score2)

> df1
  T2 T1 score1 score2 score3
1  F  A      1     13      7
2  G  B      2     14      8
3  H  C      3     15      9
4  I  D      4     16     10
5  J  E      5     17     11
6  K  M      6     18     12
> df2
  T1 T2 score1 score2
1  A  f     -1    -13
2  D  g     -2    -14
3  C  h     -3    -15
4  B  i     -4    -16
5  L  j     -5    -17

df1代表原始值,但我有一个更新的df2,它只记录了一些相同的变量.但是df2是最新的,所以我想在df1$T1df2$T1匹配时替换所有值(对于所有匹配列).

我想大概是df1[match(df1$T1, df2$T1),] <- df2,但当它们是不同维度时,它就不起作用了,而且它也不会匹配相同的colnames.加入dfs很乏味,因为它实际上并不替换这些值(它会添加一个新列,如T2.y、score1.y等)

我想得到这样的东西:

> df1
  T2 T1 score1 score2 score3
1  f  A     -1    -13      7
2  i  B     -4    -16      8
3  h  C     -3    -15      9
4  g  D     -2    -14     10
5  J  E      5     17     11
6  K  M      6     18     12

推荐答案

新的dplyr rows_update使这很容易.

library(dplyr)

df1 %>% rows_update(df2, by = 'T1', unmatched = "ignore")

#  T2 T1 score1 score2 score3
#1  f  A     -1    -13      7
#2  i  B     -4    -16      8
#3  h  C     -3    -15      9
#4  g  D     -2    -14     10
#5  J  E      5     17     11
#6  K  M      6     18     12

R相关问答推荐

R的法国工作日

如何在列表的子元素上使用setName

在处理因素时,Base R grep家族比stringr变体快得多

如何生成包含可能条目列表而不是计数的表?

插入指示行之间时间间隔的新行

如何将log 2刻度上的数字转换为自然log

变量计算按R中的行更改

geom_Ribbon条件填充创建与数据不匹配的形状(ggplot 2 r)

如何使用`ggplot2::geom_segment()`或`ggspatial::geom_spatial_segment()`来处理不在格林威治中心的sf对象?

我不能在docker中加载sf

如何在modelsummary中重命名统计数据?

将数据集中的值增加到当前包含的最大值

错误:非常长的R行中出现意外符号

如何删除最后一个可操作对象

R:如果为NA,则根据条件,使用列名模式将缺少的值替换为另一列中的值

WRS2包中带有bwtrim的简单ANOVA抛出错误

整理曲线图、曲线图和点图

如果满足条件,则替换列的前一个值和后续值

条形图中的条形图没有try 赋予它们的 colored颜色

将CSV转换为R中的自定义JSON格式