«слияние» в R заменяет реальные значения NA - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть 2 таблицы

  • data_id
  • data_id1

Мне нужно объединить их.Большинство столбцов одинаковы, поэтому только информация из столбца с именем «FLatSchool» будет фактически добавлена ​​из data_id1 к data_id:

all_data = merge (data_id, data_id_1, by=c("ID_w2", "ID_w3", "ID_w4", "ID_w5",
                                        "ID_MC_w3", "ID_MC_w5",
                                        "School", "Class"),
              all.x = T )

Перед объединением я проверяю «data_id1» и вижу, что они разные (числовые) значения в столбце «FLatSchool».Однако при объединении обеих таблиц этот столбец в итоговой таблице содержит только NA (с другими столбцами проблем нет, только с этим).В чем может быть проблема?

Данные:

> dput(data_id)
structure(list(School = c(3L, 3L, 3L), Class = c(10L, 10L, 10L
), ID_w2 = structure(1:3, .Label = c("RU8_800", "RU8_801", "RU8_802"
), class = "factor"), ID_all = 71163901:71163903, ID_w3 = 427748:427750, 
ID_MC_w3 = structure(1:3, .Label = c("stp94660", "stp94661", 
"stp94662"), class = "factor"), ID_w4 = 428617:428619, ID_w5 = 
428725:428727, 
ID_MC_w5 = structure(1:3, .Label = c("STP114890", "STP114891", 
"STP114892"), class = "factor")), .Names = c("School", "Class", 
"ID_w2", "ID_all", "ID_w3", "ID_MC_w3", "ID_w4", "ID_w5", "ID_MC_w5"
), row.names = c(NA, 3L), class = "data.frame")


> dput(data_id_1)
structure(list(ID_w2 = structure(c(NA, 2L, 1L), .Label = c("RU8_235", 
"RU8_239"), class = "factor"), ID_w3 = 427521:427523, ID_MC_w3 = 
structure(1:3, .Label = c("stp94433", 
"stp94434", "stp94435"), class = "factor"), ID_w4 = 428390:428392, 
ID_w5 = 428781:428783, ID_MC_w5 = structure(1:3, .Label = c("stp114946", 
"stp114947", "stp114948"), class = "factor"), School = c(1L, 
1L, 1L), Class = c(5L, 5L, 5L), FLatSchool = c(1L, 1L, 1L
)), .Names = c("ID_w2", "ID_w3", "ID_MC_w3", "ID_w4", "ID_w5", 
"ID_MC_w5", "School", "Class", "FLatSchool"), row.names = c(NA, 
3L), class = "data.frame")

Что я получаю после использования приведенного выше сценария, это

> dput(all_data)
structure(list(ID_w2 = structure(1:3, .Label = c("RU8_800", "RU8_801", 
"RU8_802"), class = "factor"), ID_w3 = 427748:427750, ID_w4 = 
428617:428619, 
ID_w5 = 428725:428727, ID_MC_w3 = structure(1:3, .Label = c("stp94660", 
"stp94661", "stp94662"), class = "factor"), ID_MC_w5 = structure(1:3, 
.Label = c("STP114890", 
"STP114891", "STP114892"), class = "factor"), School = c(3L, 
3L, 3L), Class = c(10L, 10L, 10L), ID_all = 71163901:71163903, 
FLatSchool = c(NA_integer_, NA_integer_, NA_integer_)), .Names = 
c("ID_w2", 
"ID_w3", "ID_w4", "ID_w5", "ID_MC_w3", "ID_MC_w5", "School", 
"Class", "ID_all", "FLatSchool"), row.names = c(NA, -3L), class = 
"data.frame")

Что я ожидаю, это

> dput(all_data)
structure(list(ID_w2 = structure(1:3, .Label = c("RU8_800", "RU8_801", 
"RU8_802"), class = "factor"), ID_w3 = 427748:427750, ID_w4 = 
428617:428619, 
ID_w5 = 428725:428727, ID_MC_w3 = structure(1:3, .Label = c("stp94660", 
"stp94661", "stp94662"), class = "factor"), ID_MC_w5 = structure(1:3, 
.Label = c("STP114890", 
"STP114891", "STP114892"), class = "factor"), School = c(3L, 
3L, 3L), Class = c(10L, 10L, 10L), ID_all = 71163901:71163903, 
FLatSchool = c(1, 1, 1)), .Names = c("ID_w2", 
"ID_w3", "ID_w4", "ID_w5", "ID_MC_w3", "ID_MC_w5", "School", 
"Class", "ID_all", "FLatSchool"), row.names = c(NA, -3L), class = 
"data.frame")

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Спасибо всем за отклик!Проблема решена, мне просто нужно было поставить «все = ИСТИНА» в формулу слияния:

all_data = merge (data_id, data_id_1, by=c("ID_w2", "ID_w3", "ID_w4", "ID_w5",
                                        "ID_MC_w3", "ID_MC_w5",
                                        "School", "Class"),
              all.x = T , all = T)
0 голосов
/ 05 декабря 2018

Вы добавляете наблюдения?Я также рекомендовал бы использовать библиотеку (dplyr).

left_join(x, y, by = c("a" = "b"), copy = FALSE, suffix = c(".x", ".y"), ...) 

убедитесь, что FLatSchool слева, чтобы сохранить эти значения.в операторе by вы можете иметь несколько переменных.

суффикс = Если в x и y есть несоединенные дублирующиеся переменные, эти суффиксы будут добавлены к выходным данным для устранения их неоднозначности.Должен быть символьный вектор длиной 2.

Проверить этот сайт: https://rpubs.com/williamsurles/293454

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...