※ 引述《but07 (BUT07)》之銘言:
: [問題類型]:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
: [軟體熟悉度]:
: 入門(寫過其他程式,只是對語法不熟悉)
: [問題敘述]:
: 想要知道應變數(y)在各個x中的不同group的占比(%)
: 以下是拿arules裡面的IncomeESL資料作範例
: 我想要知道
: 1. 男性在每個收入成的占比(男性/全部)
: 2. 男性在每個年齡層的占比(男性/全部)
: 目前的圖:
: http://imgur.com/yvKPuNZ
: 希望的圖:
: http://imgur.com/sLocu8c
: (希望有點+曲線趨勢線)
: [程式範例]
: plot(sex~income+age,data=IncomeESL)
: 上面是我目前使用的code
: Google了一下找不太到答案
: 可能是我不太會下關鍵字
: 只好上來麻煩各位大大了
: 感謝
不知道是不是你要的,我讀了幾次,還是有點無法理解你想要的東西
我還是嘗試用折線圖去呈現男性於各收入級距、年齡層的比例
看看是否符合你的需求。
我也沒想到更簡單的畫法,就直接畫,但是這樣就會需要對資料整理比較熟悉
才有辦法直接整理資料你需要的資料做繪圖的動作
這個可能對一般R的新手是一道門檻,非常建議學會用dplyr做資料整理
然後用ggplot2去呈現你的圖形
我的做法是每一次都控制x變數,計算proportion之後
在繪製再圖上,兩張圖就要group_by兩次,當然也有函數解法放在下面
不過函數解法就比較難了,不太適合新手。
有任何疑問可以再發問。
library(ggplot2)
library(dplyr)
library(pipeR)
data("IncomeESL", package = "arules")
IncomeESL %>>% group_by(income) %>>%
summarise(male_proportion = length(income[sex == "male"]) / n()) %>>%
{
ggplot(., aes(x = income, y = male_proportion, group = 1)) +
geom_point() + geom_line()
}
IncomeESL %>>% group_by(age) %>>%
summarise(male_proportion = length(age[sex == "male"]) / n()) %>>%
{
ggplot(., aes(x = age, y = male_proportion, group = 1)) +
geom_point() + geom_line()
}
也是可以改成用函數做,只是這個技巧比較高一點:
plot_prop_f <- function(data, variableName, ylim = numeric(0)){
stopifnot(length(variableName) == 1)
stopifnot(length(ylim) %in% c(0, 2))
group_by_(data, variableName) %>>%
summarise_(.dots = setNames(list(
sprintf("length(%s[sex == 'male']) / n()", variableName)),
"male_proportion")) %>>%
{
g <- ggplot(., aes_(x = as.name(variableName), y = ~ male_proportion,
group = ~ 1)) + geom_point() + geom_line()
if (length(ylim) == 2)
g <- g + ylim(ylim)
g
}
}
plot_prop_f(IncomeESL, "age")
plot_prop_f(IncomeESL, "age", c(0.35, 0.5))
plot_prop_f(IncomeESL, "income")
plot_prop_f(IncomeESL, "income", c(0.4, 0.5))