Select 匹配列时匹配非 NA 值
Select non NA values in match when matching columns
我有两个 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$ID
与 aa$ID
匹配来填充 bb$Name
,以便我得到字母表中最早的名字(在本例中为 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
中有超过 1 个相同的值,并且如果其中一个值是 NA
,则 select 按字母顺序排列较早的那个。所以 bb$Name 中的 d
值将是 James
我知道我可以对原始数据进行子集化,但我不想在我的实际数据中这样做,因为 aa$Name
具有 NA
值的信息很重要
创建 aa 的临时副本可以吗?
tmp <- aa[!is.na(aa$Name),]
tmp <- tmp[order(tmp$Name),]
bb$Name <- tmp[match(bb$ID,tmp$ID),2]
bb
这会得到你想要的结果。
我有两个 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$ID
与 aa$ID
匹配来填充 bb$Name
,以便我得到字母表中最早的名字(在本例中为 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
中有超过 1 个相同的值,并且如果其中一个值是 NA
,则 select 按字母顺序排列较早的那个。所以 bb$Name 中的 d
值将是 James
我知道我可以对原始数据进行子集化,但我不想在我的实际数据中这样做,因为 aa$Name
具有 NA
值的信息很重要
创建 aa 的临时副本可以吗?
tmp <- aa[!is.na(aa$Name),]
tmp <- tmp[order(tmp$Name),]
bb$Name <- tmp[match(bb$ID,tmp$ID),2]
bb
这会得到你想要的结果。