R 数据帧中两列之间的计算

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

我有一个名为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     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