将函数应用于R中的筛选行

  • 本文关键字:筛选 函数 应用于 r
  • 更新时间 :
  • 英文 :


我有一个长数据集,其中每一行都是该州当年的所得税税率。以下是几行示例:

State   statefip year  TopRate
<chr>      <dbl> <fct>   <dbl>
1 Alabama        1 2018     0.05
2 Alabama        1 2017     0.05
3 Alabama        1 2016     0.05
4 Alabama        1 2015     0.05
5 Alabama        1 2014     0.05
6 Alabama        1 2013     0.05
7 Alabama        1 2012     0.05
8 Alabama        1 2011     0.05
9 Alabama        1 2010     0.05
10 Alaska         2 2018     0   

我想为每年创建一个分位数(.5、.75、.80等(的额外列。因此,.5(中位数(栏将显示2018年所有州的税率中位数,依此类推。需要澄清的是,2018年某个州的每一项观察结果都将具有相同的0.5税率,但每年都会发生变化。虽然这看起来很奇怪,但当我以后必须将这些数据与其他数据合并时,它会对我有所帮助。提前感谢您的帮助!

编辑:这是我想要的。。

State   statefip year  TopRate median     q3    q80    q85    q90 jenkb$jenkb
<chr>      <dbl> <fct>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>       <int>
1 Alabama        1 2018     0.05 0.0575 0.0700 0.074  0.0888 0.0897           0
2 Alabama        1 2017     0.05 0.0575 0.0700 0.074  0.0854 0.0895           0
3 Alabama        1 2016     0.05 0.0575 0.0700 0.074  0.0854 0.0895           0
4 Alabama        1 2015     0.05 0.0575 0.0700 0.074  0.0888 0.0897           0
5 Alabama        1 2014     0.05 0.058  0.07   0.0765 0.0888 0.0897           0
6 Alabama        1 2013     0.05 0.0599 0.072  0.0775 0.0839 0.0895           0
7 Alabama        1 2012     0.05 0.06   0.072  0.0775 0.0866 0.0895           0
8 Alabama        1 2011     0.05 0.06   0.0738 0.078  0.085  0.0897           0
9 Alabama        1 2010     0.05 0.06   0.0738 0.078  0.0872 0.0897           1
10 Alaska         2 2018     0    0.0575 0.0700 0.074  0.0888 0.0897           0
# ... with 449 more rows

除了我希望JenkB专栏每年都是1,该州在该年的Jenks假期中属于第二个桶。

taxlong %>%
group_by(year) %>% 
mutate(median = quantile(TopRate, .5)) %>%
mutate(q3 = quantile(TopRate, .75)) %>%
mutate(q80 = quantile(TopRate, .80)) %>%
mutate(q85 = quantile(TopRate, .85)) %>%
mutate(q90 = quantile(TopRate, .90)) #%>%
#mutate(jenkb = as.integer((TopRate > 0.0323 & year == 2018 | 2017 | 2015) | (TopRate > 0.0375 & year == 2016) | (TopRate > 0.034 & year == 2014 | 2013 | 2012 | 2011 | 2010)))

此代码不起作用

我们可以将quantilecut一起使用,在按组列"年份"分组后创建列

library(dplyr)
df1 %>%
group_by( year) %>% 
mutate(new = cut(TopRate, breaks = c(-Inf, quantile(TopRate, 
probs = c(.5, .75, .8) ), Inf)))

如果我们想创建具有quantile值的新列(值将对每行重复(,请将其放置在list中,然后将unnest放置为"宽"格式

library(tidyr)
df1 %>% 
group_by(year) %>%
mutate(new = list(quantile(TopRate, probs = c(.5, .75, .8)))) %>% 
unnest_wider(c(new))

或使用data.table

library(data.table)
setDT(df1)[, new := cut(TopRate, breaks = c(-Inf, quantile(TopRate, probs = c(.5, .75, .8)), Inf)), .( year)]

感谢您的帮助。

taxlong %>%
group_by(year) %>% 
mutate(median = quantile(TopRate, .5))

工作非常完美,我只需要为我需要的每个分位数重复这个过程。我需要为以后的分析保留这些值。

最新更新