Разбор с вложенным lapply - PullRequest
       29

Разбор с вложенным lapply

1 голос
/ 30 апреля 2020

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

ДАННЫЕ

data <- data.frame(ex=c(1,2),date_1 = c("30/12/1997\n22/12/1998","15/12/1993"), date_2 = c("21/03/1997\n11/04/1996\n11/04/1996\n11/04/1996\n11/04/1996",NA))
expected <- data.frame(ex=c(1,2),date_1 = c("1998-12-22","1993-12-15"), date_2 = c("1997-03-21",NA))

КОД ПРОВЕРЕН (1) ОШИБКА: ВСЕ ВХОДЫ ПОЛУЧАЮТ ЗНАЧЕНИЕ VAR MAX, НЕ ЗНАЧЕНИЕ MAX КЛЕТОК

data[grep("date",names(data),value = T)] <- lapply(data[grep("date",names(data),value = T)], function(x) max(as.Date(str_split(x,"\n")[[1]],format="%d/%m/%Y"), na.rm = T))

КОД ПЫТАЕТСЯ (2) (NESTED LAPPLY) ОШИБКА : КОД ОТКРЫВАЕТСЯ КУДА-ТО ГДЕ

data[grep("date",names(data),value = T)] <- lapply(data[grep("date",names(data),value = T)], function(y) max(y, lapply(data[grep("date",names(data),value = T)], function(x) 
as.Date(str_split(x,"\n")[[1]],format="%d/%m/%Y"), na.rm = T)))

КОД ПЫТАЕТСЯ (3) (NESTED LAPPLY) ОШИБКА: КОД ОТКРЫВАЕТСЯ КУДА-ТО

data[grep("date",names(data),value = T)] <- lapply(data[grep("date",names(data),value = T)], function(y) max(y,function(x) as.Date(str_split(x,"\n")[[1]],format="%d/%m/%Y"), na.rm = T))

1 Ответ

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

Мы можем использовать:

data[-1] <- lapply(data[-1], function(y) sapply(strsplit(y ,"\n"), 
                               function(x) max(as.Date(x, "%d/%m/%Y"))))
data[-1] <- lapply(data[-1], as.Date)
data
#  ex     date_1     date_2
#1  1 1998-12-22 1997-03-21
#2  2 1993-12-15       <NA>

Лог c такой же, как описано для каждого столбца (кроме первого), мы разбиваем строку на "\n", конвертируем в дату и возвращаем max ценность. Внутреннее sapply l oop возвращает числовое c представление дат, поэтому мы используем другое lapply для преобразования чисел в дату.

...