У меня есть data.table
, сгенерированный fread, в котором некоторые столбцы содержат NA
s. Я хотел бы заполнить значения для этих указанных c столбцов последними доступными данными из предыдущей строки (механизм "Последнее наблюдение перенесено").
Я пробовал zoo
* na.locf
в сочетании с dplyr
mutate_at
и tidyr
функцией заполнения для заполнения этих NA.
library(dplyr) ## needed for mutate_at
library(tidyr) ## needed for fill
library(data.table) ## needed for fread
library(zoo) ## needed for na.locf
tempImport <- fread(test_filename, header = T, check.names = T, drop = "V198") %>% ## read in csv
mutate_at(vars(VP:frameRate), na.locf)
tempImport <- fread(test_filename, header = T, check.names = T, drop = "V198") %>% ## read in csv
fill(VP:frameRate)
Оба они обычно возвращались без ошибок и работали для int
и num
переменные, но не для переменных char
(один и тот же вывод str
для обоих вариантов сверху).
> str(tempImport[1093:1094, 192:197])
'data.frame': 2 obs. of 6 variables:
$ VP : int 1 1
$ condition : int 2 2
$ date : chr "2020_Feb_24_0905" ""
$ expName : chr "Ment_Rot" ""
$ psychopyVersion: chr "3.2.4" ""
$ frameRate : num 59.9 59.9
Я знаю, что data.table
nafill
не работает с char
переменные. Это также верно для na.locf
и fill
? Я не смог найти ничего в документации. Если так: есть ли возможность заполнить эти char
переменные предыдущими значениями? Кроме того: эти NA
s обычно only встречаются в этих столбцах в строке last . Однако, поскольку я хочу использовать код для пакетного сценария, я не знаю номер индекса последней строки для каждого вывода fread
. Я был бы открыт для обходных решений для достижения чего-то сопоставимого с вышеупомянутыми решениями.