使用merge语句时重复列

时间:2015-05-26 13:27:26

标签: r

当我尝试将一些代码合并到代码描述时,我得到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

我使用了这样的merge命令:

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

在这种情况下,除了合并之外还有更好的功能吗?也许只需用状态名替换状态代码?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您必须说明要删除的列,但您可以使用<regions> <region> <name>North America</name> <cult>infidel</cult> <value>100</value> </region> <region> <name>South America</name> <cult>infidel</cult> <value>99</value> </region> <region> <name>Africa</name> <cult>infidel</cult> <value>99</value> </region> <region> <name>Europe</name> <cult>infidel</cult> <value>100</value> </region> <region> <name>Oceania</name> <cult>infidel</cult> <value>100</value> </region> <region> <name>Asia</name> <cult>infidel</cult> <value>100</value> </region> </regions> 简洁地表达它。

根据您的数据生成样本数据(但更正列名称):

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

答案 1 :(得分: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