我有两个data.frame
,aa
和bb
:
aa <- data.frame(ID = c(rep(letters[1:4]),"d","d", "e","e"), Name = c("Dave", "Charlie", "Ella", NA,"Timothy","James",NA, "Bob"))
aa
ID Name
1 a Dave
2 b Charlie
3 c Ella
4 d <NA>
5 d Timothy
6 d James
7 e <NA>
8 e Bob
bb <- data.frame(ID = rep(letters[1:5]),Name = 0)
bb
ID Name
1 a 0
2 b 0
3 c 0
4 d 0
我想通过将bb$Name
与bb$ID
匹配来填充aa$ID
,以便我获得字母表中最早的名称(在本例中为James
):
ID Name
1 a Dave
2 b Charlie
3 c Ella
4 d James
5 e Bob
但是,如果我尝试bb$Name <- aa[match(bb$ID,aa$ID),2]
,我会得到:
bb
ID Name
1 a Dave
2 b Charlie
3 c Ella
4 d <NA>
5 e <NA>
您是否认为if语句代码如下:如果aa$ID
中有多个相同的值,并且其中一个值为NA
,则选择一个具有较早的字母顺序以匹配。因此,bb $ Name中的d
值为James
我知道我可以对原始数据进行分组,但我不想在我的实际数据中这样做,因为aa$Name
具有NA
值的信息非常重要
答案 0 :(得分:2)
是否可以创建aa的临时副本?
tmp <- aa[!is.na(aa$Name),]
tmp <- tmp[order(tmp$Name),]
bb$Name <- tmp[match(bb$ID,tmp$ID),2]
bb
这可以获得你想要的结果。