#r #data.table
#r #data.table
Вопрос:
У меня есть datatable
, где каждый столбец представляет временной ряд, и я хочу получить последнее значение NA для каждого временного ряда в порядке упорядочения по столбцам. В моем конкретном случае использования мои данные выглядят следующим образом:
a b c
1 2 5
1 -17 9
NA 11 4
NA 57 NA
63 NA NA
Итак, из этого я хотел бы извлечь:
a b c
63 57 4
Как я могу это сделать? Пока я вижу только ответы, касающиеся обратной ситуации извлечения последней строки, отличной от NA, для каждой строки, а не для каждого столбца.
Ответ №1:
Для тех, кто хочет использовать только base R
.
sapply(df, function(x) x[max(which(!is.na(x)))])
где
df <- data.frame(a = c(1, 1, NA, NA, 63),
b = c(2, -17, 11, 57, NA),
c = c(5, 9, 4, NA, NA))
Ответ №2:
Если набор data.table
данных равен, выполните цикл по подмножеству Data.table ( .SD
), подмножеству элемента, отличного от NA ( x[!is.na(x)]
), и извлеките последний элемент из числа тех, с tail
которыми .
df1[, lapply(.SD, function(x) tail(x[!is.na(x)],1))]
# a b c
#1: 63 57 4
Комментарии:
1. да. или
apply(df1,2,function(x)x[max(which(!is.na(x)))])
2. @akrun, возможно ли это сделать по строкам? вывод:
5, 9, 4, 57, 63
? (не уверен, заслуживает ли это нового вопроса)3. @RafaelMartins Вероятно, вам нужно
do.call(pmax, c(df1, na.rm = TRUE)) #[1] 5 9 11 57 63