Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:合并数据,同时保留一个数据集的重复值_R_Merge_Duplicates - Fatal编程技术网

R:合并数据,同时保留一个数据集的重复值

R:合并数据,同时保留一个数据集的重复值,r,merge,duplicates,R,Merge,Duplicates,我有两个数据集,data1和data2: data1 <- data.frame(ID = 1:6, A = c("a1", "a2", NA, "a4", "a5", NA), B = c("b1", "b2", "b3", NA, "b5", NA)

我有两个数据集,
data1
data2

data1 <- data.frame(ID = 1:6,
                    A = c("a1", "a2", NA, "a4", "a5", NA),
                    B = c("b1", "b2", "b3", NA, "b5", NA),
                    stringsAsFactors = FALSE)
data1

ID  A   B
1   a1  b1      
2   a2  b2      
3   NA  b3      
4   a4  NA      
5   a5  b5
6   NA  NA

我环顾四周,找到了不确切的答案。

您可以加入数据,并使用
合并
选择第一个非NA值

library(dplyr)

data1 %>%
  inner_join(data2, by = 'ID') %>%
  mutate(A = coalesce(A.x, A.y), 
         B = coalesce(B.x, B.y)) %>%
  select(names(data1))

#  ID  A  B
#1  1 a1 b1
#2  2 a2 b2
#3  3 a3 b3
#4  4 a4 b4
#5  5 a5 b5
#6  6 a6 b6
或以R为基数,将数值与NA进行比较:

transform(merge(data1, data2, by = 'ID'), 
          A = ifelse(is.na(A.x), A.y, A.x),
          B = ifelse(is.na(B.x), B.y, B.x))[names(data1)]
library(dplyr)

data1 %>%
  inner_join(data2, by = 'ID') %>%
  mutate(A = coalesce(A.x, A.y), 
         B = coalesce(B.x, B.y)) %>%
  select(names(data1))

#  ID  A  B
#1  1 a1 b1
#2  2 a2 b2
#3  3 a3 b3
#4  4 a4 b4
#5  5 a5 b5
#6  6 a6 b6
transform(merge(data1, data2, by = 'ID'), 
          A = ifelse(is.na(A.x), A.y, A.x),
          B = ifelse(is.na(B.x), B.y, B.x))[names(data1)]