說我有:
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$T1)df2$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
uj5u.com熱心網友回復:
新的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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494888.html
下一篇:groupby迭代排序
