ラベル付き変数を効率的に因子に変換する方法には苦労しています。私が扱っているデータセットはここから入手できます: [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標識クラスにスケールを適用する方法を知らないということです。私は探索研究をやっている場合は、しかし、RONE変数の作品カテゴリ変数as_factorの「収益」()
#Draw plot
ggplot(td, aes(x=as_ford(income), y=Percent, group=stress))+
#barplot
geom_bar(aes(fill=stress), stat='identity')
をラップすることにより、非常にうまく解決することができる
#
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')
、私はかもしれません多くのラベル付き変数を使ってたくさんのプロットをしています。それはかなりの余分なタイピングとして私を襲う。
この問題は、いくつかのクロス集計をプロットするために多くの変数を収集すると、値ラベルが失われるという問題が拡大します。
##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')
これで、変数の値ラベルがすべて消滅しました。ですから、これを防ぐための唯一の方法は、各ラベル付き変数をfactorラベルとして値ラベルを持つファクタに変換するためにas_factor()を個別に使用することです。しかし、もう一度、それは多くのタイピングです。
私は、ラベルされたクラスを最も効率的に処理して、それらを要因に変え、具体的にはggplot2に関してどのように扱うべきかと思います。
が実際に 'labelled'クラスです:
この
は、(この特定のプロットはあまり意味がないかもしれませんが)あなたが説明したものと同様のバープロットを作成するために使用することができますか?あなたは 'is.labelled'なんかそれでテストすることができますか?たぶん 'ford = lapply(ford、function(x)if("%in%class(x)){x = as_factor(x)} return(x)) 'を実行するだけかもしれません。 – Gregorはい、ヘイブンパッケージが定義するクラスです。 – spindoctor
dplyr 0.5の 'mutate_if'も参照してください。 – aosmith