Я хочу создать «строку», содержащую первое не-NA значение, которое появляется во фрейме данных. Так, например, учитывая этот тестовый фрейм данных:
test.df <- data.frame(a=c(11,12,13,14,15,16),b=c(NA,NA,23,24,25,26), c=c(31,32,33,34,35,36), d=c(NA,NA,NA,NA,45,46))
test.df
a b c d
1 11 NA 31 NA
2 12 NA 32 NA
3 13 23 33 NA
4 14 24 34 NA
5 15 25 35 45
6 16 26 36 46
Я знаю, что могу обнаружить первое появление не-NA следующим образом:
first.appearance <- as.numeric(sapply(test.df, function(col) min(which(!is.na(col)))))
first.appearance
[1] 1 3 1 5
Это говорит мне, что первый элемент в столбце 1 не является NA, третий элемент в столбце 2 не является NA, первый элемент в столбце 3 не является NA, а пятый элемент в столбце 4 не является NA. Но когда я соединяю части, получается следующее (что логично, но не то, что я хочу):
> test.df[first.appearance,]
a b c d
1 11 NA 31 NA
3 13 23 33 NA
1.1 11 NA 31 NA
5 15 25 35 45
Я бы хотел, чтобы вывод был первым не-NA в каждом столбце. Что такое базовый или dplyr
способ сделать это? Я не вижу этого. Заранее спасибо.
a b c d
1 11 23 31 45