2015-05-26 4 views
2

Когда я пытаюсь объединить некоторые коды с описаниями кода, я получаю 2 повторяющихся столбца. Я начинаю с этим: Таблица Название: TestПовторяющиеся столбцы при использовании оператора слияния

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 = «Код», если «Код» во втором наборе данных - это идентификатор состояния. – 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

Не 'select (-StateID')' похоже на 'a1 <-merge (test, statecode, by =" StateID ", all.x = TRUE)' и 'a1 [, - 1]'. Почему нам нужно решение '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 
Смежные вопросы