【问题标题】:How can I create columns in R when looping through a vector?循环遍历向量时如何在 R 中创建列?
【发布时间】:2022-01-08 08:01:34
【问题描述】:

在 R 中,我试图生成一个按组显示特定百分位数的汇总数据框,其中汇总数据框中列的名称取决于百分位数的名称。

我的原始数据框属于以下类型:

Month a b c d
Jan 1 2 3 4
Feb 5 6 7 8
March 9 10 11 12
April 13 14 15 16

我想按月创建一个包含第 5、第 10、第 50 和第 75 个百分位数的数据框:

Month perc_5 perc_10 perc_50 perc_75
Jan 5th perc 10th perc 50th perc 75th perc
Feb 5th perc 10th perc 50th perc 75th perc
March 5th perc 10th perc 50th perc 75th perc
April 5th perc 10th perc 50th perc 75th perc

在 Stata 中,我会使用 foreach 循环来完成此操作,使用 "` '"m 生成列名,例如

foreach var of varlist:
    egen perc_`var'= pctile(column), p(`var')

我一直在尝试使用 for 循环在 R 中执行此操作,但没有任何运气。我也在 Stack Overflow 上进行了广泛的搜索,但未能找到答案。谁能给点建议?

【问题讨论】:

  • a、b、c、d 列是不同的组吗?或同一组中的差异观察?您是否尝试生成行百分位数?你的真实数据有多少列?
  • Stata 代码最好完全忽略,即使回答的人对 Stata 了解一些或很多。抱歉,但这真的没有意义,而且距离合法还有很长的路要走。
  • 原始数据框中的列/值与第二个数据框中的列/值究竟是什么关系?

标签: r loops stata


【解决方案1】:

显然,您必须将其分组,但这里有一个模型可供使用。您提供(和我创建)的数据每个月每个列只有一个值,因此百分位数的概念是未定义的。

# create test data
df <- data.frame (m=letters, a=1:26, b=50:75, c=101:126)

# calculate your percentiles

f <- df %>% map_dfr( ~ quantile(.x, probs = c(0.05, 0.1, 0.5, 0.75))) %>%
            bind_cols(f, col=names(df))
# A tibble: 3 x 5
    `5%` `10%` `50%` `75%` col  
   <dbl> <dbl> <dbl> <dbl> <chr>
1   2.25   3.5  13.5  19.8 a    
2  51.2   52.5  62.5  68.8 b    
3 102.   104.  114.  120.  c  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2013-03-04
    • 2022-11-15
    • 2015-08-11
    • 2016-10-13
    • 2019-09-16
    相关资源
    最近更新 更多