Как взять данные в один файл r и использовать его для замены части данных в другой - PullRequest
0 голосов
/ 08 марта 2020

У меня есть два набора данных в r, один имеет столбец с информацией, которую я хотел бы добавить к другому, который в настоящее время заполнен NA.

Чтобы дать вам представление, это то, что два наборы данных выглядят следующим образом:

DATASET 1:

id || location || city name
1 || 54.234 || name1
2 || NA || name2
3 || NA || name3
4 || 55.2345 || name4

DATASET 2:

id || location || city name
2 || 57.234 || name2
3 || 58.234 || name3

Я хочу получить следующее:

id || location || city name
1 || 54.234 || name1
2 || 57.234 || name2
3 || 58.234 || name3
4 || 55.2345 || name4

Прямо сейчас я использую это:

dataSetFinal <- rbind(dataSet1, dataSet2, by="id")

, но это дублирует строки с общими идентификаторами, которые они имеют, и добавляет соответствующие местоположения в дубликаты. Как я могу получить желаемый результат? Спасибо.

1 Ответ

1 голос
/ 08 марта 2020

Мы можем объединить два набора данных с помощью id и city.name и затем выбрать столбцы без NA из location, используя coalesce.

library(dplyr)

left_join(df1, df2, by = c('id', 'city.name')) %>%
  mutate(location = coalesce(location.x, location.y)) %>%
  select(names(df1))

#  id location city.name
#1  1  54.2340     name1
#2  2  57.2340     name2
#3  3  58.2340     name3
#4  4  55.2345     name4

Или в базе R:

transform(merge(df1, df2, by = c('id', 'city.name'), all.x = TRUE), 
      location = ifelse(is.na(location.x), location.y, location.x))[names(df1)]

данные

df1 <- structure(list(id = 1:4, location = c(54.234, NA, NA, 55.2345
), city.name = structure(1:4, .Label = c("name1", "name2", "name3", 
"name4"), class = "factor")), class = "data.frame", row.names = c(NA, -4L))

df2 <- structure(list(id = 2:3, location = c(57.234, 58.234), 
city.name = structure(1:2, .Label = c("name2", "name3"), class = "factor")), 
class = "data.frame", row.names = c(NA, -2L))
...