применить полученный список вместо dataframe - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть датафрейм с делами, которые повторяются в строках. Некоторые строки содержат более полные данные, чем другие. Я хотел бы сгруппировать случаи, а затем назначить первое не пропущенное значение всем ячейкам 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», но я в тупике.

1 Ответ

0 голосов
/ 06 ноября 2018

Как насчет использования lapply с do.call и cbind, например:

df <- do.call(cbind, lapply(df, function(x) {summarise(df, x=x[which(!is.na(x))[1]])}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...