R 数据帧中两列之间的计算
我有一个名为cleancc的数据帧,格式如下:R 数据帧中两列之间的计算,r,R,我有一个名为cleancc的数据帧,格式如下: Education Status College Default College No Default HS Default PHD No Default HS No Default College No Default 我想进行一些计算,看看基于教育水平的违约率。例如,类似这样的事情 Education Def NDef DefRate HS 1 1
Education Status
College Default
College No Default
HS Default
PHD No Default
HS No Default
College No Default
我想进行一些计算,看看基于教育水平的违约率。例如,类似这样的事情
Education Def NDef DefRate
HS 1 1 50.00%
College 1 2 33.33%
PHD 0 1 0.00%
下面的代码为我获取每个教育级别的计数
table(cleancc$Education)
我正在努力解决如何将这些链接到状态列并创建显示默认利率的表。我们可以使用非常有用的
dplyr
包来执行此聚合:
library(dplyr)
dat %>%
group_by(Education) %>%
summarise(Def = sum(Status == 'Default'),
NDef = sum(Status != 'Default'),
DefRate = mean(Status == 'Default'))
Education Def NDef DefRate
<chr> <int> <int> <dbl>
1 College 1 2 0.3333333
2 HS 1 1 0.5000000
3 PHD 0 1 0.0000000
数据
我们可以使用非常有用的
dplyr
包来执行此聚合:
library(dplyr)
dat %>%
group_by(Education) %>%
summarise(Def = sum(Status == 'Default'),
NDef = sum(Status != 'Default'),
DefRate = mean(Status == 'Default'))
Education Def NDef DefRate
<chr> <int> <int> <dbl>
1 College 1 2 0.3333333
2 HS 1 1 0.5000000
3 PHD 0 1 0.0000000
数据
cleancc%
组别(教育)%>%
汇总(Def=sum(Status='Default'),
NDef=总和(状态='无默认'),
DefRate=Def/(Def+NDef))
cleancc%
组别(教育)%>%
汇总(Def=sum(Status='Default'),
NDef=总和(状态='无默认'),
DefRate=Def/(Def+NDef))
使用基本R函数,addmargins
,它接受一个表作为输入,并有一个函数参数,我们可以
addmargins(table(dat), 2, FUN = list("perc"=function(x) x[1] / sum(x)))
Status
Education Default No Default perc
College 1.0000000 2.0000000 0.3333333
HS 1.0000000 1.0000000 0.5000000
PHD 0.0000000 1.0000000 0.0000000
我们将函数包装在一个列表中,以提供一个合理的名称。使用基本R函数,
addmargins
,它接受一个表作为输入,并有一个函数参数,我们可以
addmargins(table(dat), 2, FUN = list("perc"=function(x) x[1] / sum(x)))
Status
Education Default No Default perc
College 1.0000000 2.0000000 0.3333333
HS 1.0000000 1.0000000 0.5000000
PHD 0.0000000 1.0000000 0.0000000
我们将函数包装在一个列表中,以提供一个合理的名称。您的解决方案与我的解决方案有什么不同(除了在我发布我的解决方案后发布的解决方案之外)?它不是。你一定是在我写我的东西的时候把你的贴出来了。你是在建议我抄袭你的答案吗?不,我不是在建议你抄袭我的答案。你的解决方案与我的有什么不同(除了在我发布我的解决方案后被发布)?不是。你一定是在我写我的东西的时候把你的贴出来了。你是说我抄袭了你的答案吗?不,我不是说你抄袭了我的答案。
addmargins(table(dat), 2, FUN = list("perc"=function(x) x[1] / sum(x)))
Status
Education Default No Default perc
College 1.0000000 2.0000000 0.3333333
HS 1.0000000 1.0000000 0.5000000
PHD 0.0000000 1.0000000 0.0000000