2015-05-26 45 views
2

當我嘗試將一些代碼合併到代碼描述時,我得到2個重複列。我開始了這一點: 表名:測試使用合併語句時重複列

ID  State 
1  5 
2  2 
3  5 

,並希望與該合併它: 表名:statecode

StateID State 
5  Mass 
2  NY 

做一個表是這樣的:

ID State 
1  Mass 
2  NY 
3  Mass 

但是,我得到這樣的表格:

ID State State 
1  5  Mass 
2  2  NY 
3  5  Mass 

我用這樣的合併命令:

test = merge(x = test, y = statecode, by.x = "State", by.y = "StateID", all.x = T) 

有沒有更好的功能以外合併在這種情況下使用?也許只是用州名替換州代碼?

非常感謝您的幫助!

+0

'by.y =「StateID」'應該是'by.y =「代碼」'如果第二個數據集中的代碼是狀態ID。 – user227710

+0

感謝您的評論,但是我寫錯了對不起。我固定他們在原來的雖然! –

回答

3

您不得不說要刪除哪一列,但您可以使用dplyr簡明表示它。

根據你的(但校正的列名)生成的示例數據:

test <- read.table(text = 
"ID StateID 
1  5 
2  2 
3  5", header = TRUE) 

statecode <- read.table(text = 
" 
StateID  State 
5   Mass 
2   NY", header = TRUE) 

使用dplyr

library(dplyr) 
test %>% left_join(statecode, by = "StateID") %>% select(-StateID) 
    ID State 
1 1 Mass 
2 2 NY 
3 3 Mass 
+0

有沒有辦法糾正列名?我不認爲我可以將狀態改爲StateID,對不起! –

+0

我也有多個變量的代碼描述表。我不知道我是否可以將它們全部重新編碼。 –

+0

與'a1 <-merge(test,statecode,by =「StateID」,all.x = TRUE)''和'a1 [, - 1]'類似,不是'select(-StateID')。爲什麼我們需要'dplyr'特定的解決方案? – user227710

2

的另一種方法與base R

Pmerge <- function(df1, df2) { 
    res <- suppressWarnings(merge(df1, df2, by.x = "State", by.y = "Code", all.x = T)[,-1]) 
    newdf <- res[order(res$ID),] 
    row.names(newdf) <- 1:nrow(newdf) 
    newdf 
} 

Pmerge(Test, statecode) 
    ID State 
1 1 Mass 
2 2 NY 
3 3 Mass