我有一个数据框A:
ID A B C
2000 2 3 4
2001 2 7 2
2002 1 8 5
2003 6 2 3
另一个数据框B:
ID B
2001 0
2003 0
预期产出:
ID A B C
2000 2 3 4
2001 2 0 2
2002 1 8 5
2003 6 0 3
这是一个大型数据集,我想找到所有常见ID,并用另一个数据帧中的值替换特定列。
我该怎么做?
答案 0 :(得分:0)
试试这个:
library(data.table)
dt1 = data.table(ID = c(2000,2001,2002,2003), A = c(2,2,1,6), B = c(3,7,8,2), C = c(4,2,5,3))
dt2 = data.table(ID = c(2001, 2003), B = c(0,0))
dt1 = merge(dt1,dt2,by = c("ID"),all.x = TRUE)
给了我们
ID A B.x C B.y
1: 2000 2 3 4 NA
2: 2001 2 7 2 0
3: 2002 1 8 5 NA
4: 2003 6 2 3 0
然后,我不确定你是否有拼写错误而且真的想重置B,但是如果你确实想把C重置为B.y运行这个
dt1$C = ifelse(!is.na(dt1$B.y),dt1$B,dt1$C)
哪会给我们:
ID A B.x C B.y
1: 2000 2 3 4 NA
2: 2001 2 7 0 0
3: 2002 1 8 5 NA
4: 2003 6 2 0 0
然后,只需删除B.y并将B.x更改回B
dt1[,B.y:= NULL]
colnames(dt1)[3] = "B"
ID A B C
1: 2000 2 3 4
2: 2001 2 7 0
3: 2002 1 8 5
4: 2003 6 2 0