我正在尝试进行外连接以合并两个数据集。在这里,我在字段“id”上加入:
> df_01
id lat B
1 3 45 212
2 4 46 212
3 5 46 211
> df_02
id lat A
1 1 45 100
2 2 45 101
3 4 46 100
4 5 46 122
5 6 46 121
> merge(df_01, df_02, by="id", all=TRUE)
id lat.x B lat.y A
1 1 NA NA 45 100
2 2 NA NA 45 101
3 3 45 212 NA NA
4 4 46 212 46 100
5 5 46 211 46 122
6 6 NA NA 46 121
(“id”确定“lat”字段中的值。)
我的问题是:我现在如何合并列“lat.x”和“lat.y”?我只需要一列,比如说“lat.x”,因此非NA值:
id lat.x B lat.y A
1 1 45 NA 45 100
2 2 45 NA 45 101
3 3 45 212 NA NA
4 4 46 212 46 100
5 5 46 211 46 122
6 6 46 NA 46 121
非常感谢, 比尔
答案 0 :(得分:0)
在我们使用OP帖子中的代码merge
数据集之后,使用pmax
或rowMeans
到transform
' lat。 X'列。
res <- merge(df_01, df_02, by="id", all=TRUE)
res1 <- transform(res, lat.x= pmax(lat.x, lat.y, na.rm=TRUE))
res1
# id lat.x B lat.y A
#1 1 45 NA 45 100
#2 2 45 NA 45 101
#3 3 45 212 NA NA
#4 4 46 212 46 100
#5 5 46 211 46 122
#6 6 46 NA 46 121
或者
transform(res, lat.x= rowMeans(cbind(lat.x,lat.y), na.rm=TRUE))
答案 1 :(得分:0)
我喜欢plyr()库中的join()。
require(plyr)
df_03 <- join(df_01, df_02, by="id", type="full")
df_03 <- df_03[order(df_03$id),] #Optional sorting by id
df_03
# id lat B A
#4 1 45 NA 100
#5 2 45 NA 101
#1 3 45 212 NA
#2 4 46 212 100
#3 5 46 211 122
#6 6 46 NA 121
答案 2 :(得分:0)
我认为您需要做的就是将c("id", "lat")
作为参数传递给by
参数
df_01
## id lat B
## 1 3 45 212
## 2 4 46 212
## 3 5 46 211
df_02
## id lat A
## 1 1 45 100
## 2 2 45 101
## 3 4 46 100
## 4 5 46 122
## 5 6 46 121
merge(df_01, df_02, by = c("id", "lat"), all = TRUE)
## id lat B A
## 1 1 45 NA 100
## 2 2 45 NA 101
## 3 3 45 212 NA
## 4 4 46 212 100
## 5 5 46 211 122
## 6 6 46 NA 121