Вопросы

Лучший способ объединить переменные в наборе данных панели в R?

Я работаю с панельными данными, где некоторые вопросы анкеты задаются только один раз, в то время как большинство других задается несколько раз на разных волнах. Итак, предположим, что у меня есть ответы на опрос по категориальной переменной.

Хотя вполне вероятно, что участники группы будут стабильно отвечать на заданный вопрос, может случиться так, что они изменят свое мнение или даже выйдут из группы. Другие могут войти в панель позже (в более поздней волне).

Допустим, это приводит к набору данных, который выглядит следующим образом, где var_1a и var_1b — две переменные, которые измеряют одно и то же, только в двух разных волнах:

mydata<-data.frame(
  var_1a = c(1,2,3,4,5,NA),
  var_1b = c(1,2,5,5,NA,NA)
)

Теперь я хотел бы автоматически объединить эти переменные в одну переменную для двух волн. В качестве условия я бы хотел взять среднее, если респонденты изменили свое мнение с одной волны на другую. Более того, я хотел бы сохранить ответ от волны 1, даже если респондент выпал из панели в волне 2.

Читать:
Добро пожаловать в R

Я делал это в R с помощью этой функции:

combo<-function(x,...){
  V<-rowMeans(x[, c(...) ], na.rm=T) * 
    ifelse(rowMeans(is.na(x[, c(...) ])) == ncol(x[, c(...) ]), NA, 1)
  ifelse(is.nan(V),NA,V)}

По какой-то причине это вводит «NaN», если все переменные последовательно NA для всех волн, следовательно, последняя строка кода в функции.

Это прекрасно работает, и я получаю то, что хотел:

> mydata$combo_var<-combo(mydata, c("var_1a","var_1b"))
> mydata

   var_1a var_1b combo_var
1       1      1       1.0
2       2      2       2.0
3       3     -3       0.0
4       4      9       6.5
5       5     NA       5.0
6      NA     NA        NA
7      NA     NA        NA
8      NA     NA        NA
9      NA     NA        NA
10     NA     NA        NA

Однако мне было интересно, есть ли лучший и простой способ сделать это. Есть ли способ сделать то же самое с помощью dplyr? Любое решение tidyverse?

Похожие записи

Как узнать, присутствует ли файл в нескольких ветках в git

admin

AZURE DATA FACTORY — Системе не удалось найти введенную опцию среды.

admin

Как я могу проверить, есть ли значение, например имя существует в коллекции в любом из документов в Cloud Firestore?

admin

Material-UI: X-Grid / DataGrid по умолчанию ColumnMenu не отображается

admin

github не может использовать пользовательский ssh-ключ

admin

Angular Guard и кнопка возврата браузера: странное взаимодействие

admin