2015-04-02 101 views
0

我想做一個外連接合並兩個數據集。在這裏,我做的加盟在球場上「身份證」(該「ID」決定了「緯度」字段的值)R:如何合併兩列中的值?

> 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 

我的問題是:我怎麼現在合併列「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

感謝oshun,akrun和Chinmay你的快速反應和三種不同的方法 - 所有的工作一種享受! – 2015-04-02 19:21:38

回答

0

我喜歡參加()從plyr()庫。

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 
0

後,我們merge使用的代碼在OP的帖子中的數據集, 'lat.x'列使用pmaxrowMeanstransform

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)) 
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