как объединить два файла и заменить неправильные значения в переменной? - PullRequest
0 голосов
/ 24 апреля 2020

Доброе утро У меня есть файл с некоторыми неправильными значениями для некоторых переменных, и я должен заменить их на правильные значения вторым файлом

file 1:
city lat       log 
Bog  5°3'33sS  05°34'3,4w
Bog  8°3'44sS  07°78'4,6w
Cal  51°3'3sS  45°34'3,4w
Bog  22°3'12sS 05°34'3,4w
Cal  13°3'44sS 07°78'4,6w
Cal  64°3'3sS  45°34'3,4w

файл 2 (правильный файл)

city lat            log 
Bog  4°35'56.57N  74°04'51''3W
Cal  3°42'158N      76°31′14″W

Идея состоит в том, чтобы заменить неправильные значения столбцов LAT и LONG файла 1 файлом 2, я использую соединение, но объединение увеличивает столбцы, это может устранить предыдущие, но это довольно громоздко для файлов ,

Я знаю, что ответ находится в команде соединения (возможно), но я не могу понять, как объединение можно использовать для исправления

Я ценю помощь

1 Ответ

0 голосов
/ 25 апреля 2020

Я предполагаю, что строка в файле-1 верна, если в файле-2 нет подходящей строки.

Тогда, для приведенного вами примера, это можно сделать в два этапа: (1 ) удаление неправильных строк из файла-1, (2) добавление строк из файла-2.

f1_no_wrong = file1 %>%
  anti_join(file2, by = "city")

appended = rbind(f1_no_wrong, f2)

Анти-объединение возвращает каждую строку в LHS, которая не соответствует записи в RHS.

Обратите внимание, что вышеприведенный подход потерпит неудачу, если файл-1 или файл-2 содержат разные столбцы друг от друга (например, в файле-1 есть несколько других столбцов, не включенных в ваш пример выше), которые вы хотите сохранить ).

В этом случае я бы порекомендовал что-то вроде:

joined = f1 %>%
  left_join(f2, by = "city", suffix = c("","_true")) %>%
  mutate(final_lat = ifelse(is.na(lat_true), lat, lat_true), # keep true value if exists
         final_log = ifelse(is.na(log_true), log, log_true)) %>%
  select(-lat, -log, -lat_true, -log_true) %>% # discard finished with columns
  rename(lat = lat_true, log = log_true) %>%
  distinct() # optional, may be required if duplicate wrong values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...