R пользовательская функция для группировки нескольких переменных - PullRequest
1 голос
/ 02 апреля 2019

Я объединил данные опроса за 3 года подряд в один фрейм данных. получается, что имена переменных различны для каждого опроса (например, в 3 раза больше 100 переменных, а не просто 100 переменных). Я пытаюсь создать функцию, которая позволяет мне вводить переменные, относящиеся к одному и тому же вопросу. Затем функция наблюдает, какая из них содержит информацию, и возвращает новую переменную, которая заменяет исходные 3 переменные.

Я попытался создать функцию ниже. Использование 'coalesce' для выбора наблюдения и игнорирование всего, что есть NA.

df <- matrix(c(3, NA, NA, NA, 0.2, NA, NA, NA, 0.5),
              ncol = 3, nrow = 3,
              dimnames = list(NULL, c("a", "b", "c")))

special_function <-function(df, Name_new_variable, Name_a, Name_b, Name_c, na.rm= FALSE) {
  df$Name_new_variable <- coalesce(df$Name_a,
                          df$Name_b,
                          df$Name_c
  )
  df$Name_a <- NULL
  df$Name_b <- NULL
  df$Name_c <- NULL
}

Ожидается, что вышеприведенная функция заглянет в фрейм данных "df". Рассмотрим имя для новой переменной "name_new_variable" и объедините 3 столбца Name_a, Name_b, Name_c.

1 Ответ

0 голосов
/ 02 апреля 2019

Если вы работаете с опросами, я предлагаю вам использовать матрицу данных вместо матрицы для df. Поскольку вы используете библиотеку dplyr, вы можете попробовать этот код:

special_function <-function(df, Name_new_variable, Name_a, Name_b, Name_c) {
  df <- as.data.frame(df) %>% select(Name_a, Name_b, Name_c)
  df[, Name_new_variable]= coalesce(df[, Name_a], df[, Name_b], df[, Name_c])
  df <- df %>% select(-c(Name_a, Name_b, Name_c)) 
  return(df)
}

special_function(df, "NewVariableName", "a", "b", "c")

Выход:

> special_function(df, "NewVariableName", "a", "b", "c")
  NewVariableName
1             3.0
2             0.2
3             0.5
...