Re: [问题] Y在不同group的占比

楼主: celestialgod (天)   2016-05-05 22:43:54
※ 引述《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))
作者: but07 (BUT07)   2016-05-06 09:57:00
万分感谢 我研究一下!

Links booklink

Contact Us: admin [ a t ] ucptt.com