Как заполнить раздел столбца уже существующими значениями, соответствующими другому столбцу в R?

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

Раздел CSV, с которым я работаю

Данные, с которыми я работаю, содержат почти 300 000 строк, и эта проблема с пустыми позывными довольно часто повторяется. Можно ли каким-либо образом заполнить эти позывные на основе соответствующих им идентификационных номеров icao24?

Я попытался использовать функцию tapply() для разделения данных на основе их номера icao24 и применения функции к каждому фрагменту, т.е.

tapply(myDF$callsign, myDF$icao24, ...)

Но я не могу понять, какую «функцию» я бы применил к каждому разделу, потому что они называются по-разному. Нужно ли мне использовать какой-то цикл, повторяющийся по каждому разделу, с применением tapply() к каждому разделу?


person Karthik Uppuluri    schedule 09.11.2020    source источник


Ответы (1)


Если значения пустые (""), то сделайте group_by 'icao24' и replace элементы, которые "" с элементом first непустого 'позывного'

library(dplyr)
df2 <- df1%>%
   group_by(icao24) %>%
   mutate(callsign = replace(callsign, callsign == "", 
            first(callsign[callsign != ""])))

Другой вариант - fill после преобразования пробела в NA

library(tidyr)
df2 <- df1 %>%
   mutate(callsign = na_if(callsign, "")) %>%
   group_by(icao24) %>%
   fill(callsign)
person akrun    schedule 09.11.2020
comment
Спасибо. Я запустил код, и результаты вывода во всем кадре данных. Есть ли способ сохранить это в новом фрейме данных или заменить уже существующий столбец? - person Karthik Uppuluri; 10.11.2020
comment
@KarthikUppuluri, вы можете просто назначить df2 <- df1 %>% ... другому объекту или тому же - person akrun; 10.11.2020
comment
Я запустил код, и после просмотра моего нового фрейма данных кажется, что все пустые элементы в столбце были заменены первым элементом для позывного (который не является пустым) вместо соответствующего окружающего позывного. Как это можно указать R, что мне нужно заменить окружающие элементы? - person Karthik Uppuluri; 10.11.2020
comment
@KarthikUppuluri, это был код для первого случая. Если это соседние элементы, то должен работать второй блок кода с fill - person akrun; 10.11.2020