Я изо всех сил стараюсь превратить помеченные переменные в факторы. Набор данных, с которым я работаю, можно получить здесь: [https://www.dropbox.com/s/jhp780hd0ii3dnj/out.sav?dl=0][1]. Это был файл данных spss, который мне нравится использовать из-за того, что используют мои коллеги.Эффективное преобразование помеченных переменных в факторы
Когда я читаю данные, вы можете видеть, что каждый фактор из файла превращается в класс с меткой.
#load libraries
library(haven)
library(tidy)
library(dplyr)
#Import
test<-read_sav(path='~/your/path/name/out.sav')
#Structure
str(test)
#Find Class
sapply(test, class)
Первая проблема, которая у меня есть, что ggplot2 не знает, как применить шкалу с меченым класса.
#
td<-ford %>%
select(income, stress) %>%
group_by(income, stress)%>%
filter(is.na(stress)==FALSE)%>%
filter(is.na(income)==FALSE)%>%
summarize(Freq=n())%>%
mutate(Percent=(Freq/sum(Freq))*100)
#Draw plot
ggplot(td, aes(x=income, y=Percent, group=stress))+
#barplot
geom_bar(aes(fill=stress), stat='identity')
Это может быть решено достаточно хорошо, обернув категориальный переменный «доход» в as_factor()
#Draw plot
ggplot(td, aes(x=as_ford(income), y=Percent, group=stress))+
#barplot
geom_bar(aes(fill=stress), stat='identity')
Это работает переменная Рона, однако, если я делаю разведочное исследование, я могу делать много сюжетов с большим количеством помеченных переменных. Это поражает меня как довольно много лишнего набора текста.
Эта проблема усиливается с проблемой этого, когда вы собираете много переменных для построения нескольких кросс-таблиц, вы теряете метки значений.
##Visualizations
test<-ford %>%
#The first two variables are the grouping, variables for a series of cross tabs
select(ford, stress,resp_gender, immigrant2, education, property, commute, cars, religion) %>%
#Some renamings
rename(gender=resp_gender, educ=education, immigrant=immigrant2, relig=religion)%>%
#Melt all variables other than ford and stress
gather(variable, category, -ford, -stress)%>%
#Group by all variables
group_by(variable, category, ford, stress) %>%
#filter out missings
filter(is.na(stress)==FALSE&is.na(ford)==FALSE)%>%
#filter out missings
filter(is.na(value)==FALSE)%>%
#summarize
summarize(freq=n())
#Show plots
ggplot(test, aes(x=as_factor(value), y=freq, group=as_factor(ford)))+geom_bar(stat='identity',position='dodge', aes(fill=as_factor(ford)))+facet_grid(~category, scales='free')
Итак, теперь все метки значений для переменных, которые были расплавлены, исчезли. Таким образом, единственный способ, который я вижу, чтобы предотвратить это, - это индивидуально использовать as_factor(), чтобы превратить каждую помеченную переменную в фактор с метками значений в качестве уровней факторов. Но, опять же, это много набрав.
Я предполагаю, что мой вопрос заключается в том, как наиболее эффективно иметь дело с маркированным классом, превращая его в факторы, особенно в отношении ggplot2.
является 'labelled' на самом деле класс? Можете ли вы проверить его с помощью 'is.labelled' или что-то в этом роде? Возможно, вы можете просто сделать ford = lapply (ford, function (x) if ("помечено"% in% class (x)) {x = as_factor (x)} return (x)) '. – Gregor
Да, помечен класс, который определяет пакет haven. – spindoctor
Также смотрите 'mutate_if' in from dplyr 0.5 – aosmith