R:如何合并两列中的值?

时间:2015-04-02 05:28:50

标签: r merge

我正在尝试进行外连接以合并两个数据集。在这里,我在字段“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

非常感谢, 比尔

3 个答案:

答案 0 :(得分:0)

在我们使用OP帖子中的代码merge数据集之后,使用pmaxrowMeanstransform' 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