У меня есть датафрейм с делами, которые повторяются в строках. Некоторые строки содержат более полные данные, чем другие. Я хотел бы сгруппировать случаи, а затем назначить первое не пропущенное значение всем ячейкам NA в этом столбце для этой группы. Это кажется достаточно простой задачей, но я застрял. У меня есть рабочий синтаксис, но когда я пытаюсь использовать команду apply, чтобы применить код ко всем столбцам в кадре данных, я получаю список обратно вместо кадра данных. Использование do.call (rbind) или rbindlist или unlist также не совсем исправляет ситуацию.
Вот синтаксис.
df$groupid<-group_indices (df,id1,id2) #creates group id on the basis of a combination of two variables
df%<>%group_by(id1,id2) #actually groups the dataframe according to these variables
df<-summarise(df, xvar1=xvar1[which(!is.na(xvar1))[1]]) #this code works great to assign the first non missing value to all missing values but it only works on 1 column at a time (X1).
У меня много столбцов, поэтому я пытаюсь использовать команду apply, чтобы сделать эту задачу управляемой.
df<-apply(df, MARGIN=2, FUN=function(x) {summarise(df, x=x[which(!is.na(x))[1]])
}
)
Это дает мне список для каждой переменной, я хотел получить фрейм данных (который я бы затем дублировал). Я попробовал rbindlist и do.call (rbind), и они привели к длинному фрейму данных только с 3 столбцами - двумя переменными group_by и 'x'.
Я знаю, проблема в том, как я использую apply, возможно, индексирование с помощью «which», но я в тупике.