Перекодирование в R с использованием dplyr (или чего-то еще) - PullRequest
0 голосов
/ 21 сентября 2018

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

Пожалуйста, посмотрите на этот код:

dataset$v18[dataset$s_18 == 1] <- "Agree"
dataset$v18[dataset$s_18 == 2] <- "Partly Agree"
dataset$v18[dataset$s_18 == 3] <- "Neutral"
dataset$v18[dataset$s_18 == 4] <- "Partly disagree"
dataset$v18[dataset$s_18 == 5] <- "Disagree"

sv18x <- dataset %>%
  filter(!is.na(v18)) %>%
  group_by(v18) %>% 
  dplyr::summarise(count=n()) %>% 
  mutate(pct=count/sum(count)*100) 

sv18x$v18 <- factor(sv18x$v18,levels = c("Agree", "Partly agree", "Neutral", "Partly disagree", "Disagree uenig"))
sv18x$pct<- trunc(sv18x$pct)

Я совершенно уверен, что это можно сделать более коротким и разумным способом.И я думаю, что это должно быть сделано с использованием dplyr :: recode () и чего-то еще, чего я, вероятно, еще не знаю.Я просто не могу понять, как это сделать.Может кто-нибудь дать мне подсказку?

1 Ответ

0 голосов
/ 21 сентября 2018

Я смоделировал воспроизводимый пример, чтобы помочь вам, но трудно понять, чего вы хотите, без реального набора данных.Первая часть может быть выполнена с помощью dplyr :: case_when (), а процентная часть - с пакетом janitor.

library(dplyr)
library(janitor)

dataset <- data.frame(ola = sample(c("a", "b", "c", 150, replace = TRUE)),
                  s_18 = sample(1:5, 150, replace = TRUE))

dataset <- dataset %>%
   mutate(v18 = case_when(
          s_18 == 1 ~ "Agree",
          s_18 == 2 ~ "Partly Agree",
          s_18 == 3 ~ "Neutral",
          s_18 == 4 ~ "Partly Disagree",
          s_18 == 5 ~ "Disagree"
          ))

sv18x <- dataset %>%
  count(v18) %>%
  janitor::adorn_percentages("col") %>%
  janitor::adorn_pct_formatting()

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...