Проблема в сопоставлении 2 фреймов данных из разных фреймов данных, как позволить R вернуть исходное значение вместо того, чтобы иметь значения NA - PullRequest
0 голосов
/ 27 ноября 2018

Исходный фрейм данных был просто местоположением другого имени пользователя. dataframe

Затем я делю разделитель разделителя на «,» для местоположения.И вот как я получил 6 столбцов местоположения.Я пытаюсь выяснить страну каждого пользователя, поэтому я пытаюсь составить карту для данных о городах мира, где есть города и страны.

library(maps)
world=world.cities
colnames(world)=c("city","country","pop","lat","long","capital")

Я пытаюсьсопоставьте столбцы location_1, location_2, ... location_6 в первом кадре данных, чтобы проверить, есть ли совпадение со столбцом страны во втором кадре данных.У меня есть этот код, и он работает, и я заполнил некоторые страны df1.

df1$country<- df2$country[ match(df1$location_1, df2$country)]

Однако, когда я пытаюсь снова запустить тот же код для остальных мест.Это не сработало, просто выскочили значения NA, я думаю, есть ли способ, чтобы всякий раз, когда есть столбец со значением NA, он просто пропускал это конкретное совпадение с df2. df1 df2

df1$country<- df2$country[ match(df1$location_1, df2$country)]
df1$country<- df2$country[ match(df1$location_2, df2$country)]
df1$country<- df2$country[ match(df1$location_3, df2$country)]
df1$country<- df2$country[ match(df1$location_4, df2$country)]
df1$country<- df2$country[ match(df1$location_1, df2$country)]

Я могу закодировать их вручную, удалив сопоставленную страну и оставив сопоставления для столбцов NA, но это слишкомдорого за время.Посмотрите код ниже:

 df1$country<- df2$country[ match(df1$location_1, df2$country)]
df3=df1 %>% filter(is.na(country))
df3$country<- df2$country[ match(df3$location_2, df2$country)]
 df4=df3 %>% filter(is.na(country))

Я сделал что-то подобное, и это работает, но это действительно не то, что я хочу.Я думаю, есть ли другой способ.

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 27 ноября 2018

Без data.frame в коде, а не на скриншоте, это сложно проверить.

Если местоположения в одной строке не из одной страны, что мы делаем?

Мой ответ может быть:

df1 <- (
  df1 
  %>% dplyr::left_join (df2, by=c("location_1"="country"), suffix = c(".x", ".y") )
  %>% dplyr::left_join (df2, by=c("location_2"="country"), suffix = c(".x", ".z")  )# etc
  %>% mutate (
             country= ifelse(is.na(city.y),location_1.x,country.y),
             country= ifelse(is.na(city.y),location_1.x,country.z),
  ) 
)

Но я не понимаю всех ваших данных.

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