【问题标题】:Generating demographic tables/frequencies of a large number of specific variables in R在 R 中生成大量特定变量的人口统计表/频率
【发布时间】:2020-01-23 16:46:59
【问题描述】:

我有较大的数据集,“首次运行”需要一组基本频率(组在列中标记为 1 或 0)。问题是一些基本频率是针对大量变量(180 个左右)的,这些变量没有以特定前缀命名,也没有定位在 2:100 列中。它们可能在 2:80 列中,然后是 90:117 等。

我知道这样做的基本要点是这样的:

mtcars %>% filter(gear == 4) %>% group_by(am) %>% summarise(n=n()) %>% mutate(perc = n / sum(n)*100)

一个问题是我的 3-5 个组都标记在不同的列中,所以我需要使用 filter(pop1 == 1)、filter(pop2 == 1) 等。但是有没有办法group_by 遍历 180 个变量,每个变量都有一个输出?这只是每个变量值或缺失的简单频率。所以对于 mtcars 来说,它的频率是 am,然后是 vs。输出是一个长的有两列的就可以了。

像这样:

Variable Value  n  Perc
am        0     4  33.3
am        1     8  66.7
vs        0     2  16.7
vs        1     10 83.3

我认识到这可能涉及收集或 pivot_longer,但无法找到一种方法仅将 180 个变量从我需要频率的 200 个变量中转换为 long。

编辑:

我最终使用它来选择许多列:

positions <- c(4:176,198)

并使用 select(positions) 来避免输入所有变量。

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用purrr中的map单独进行分组并应用与OP帖子中相同的代码

    library(dplyr)
    library(purrr)
    map_dfr(c('am', 'vs'), ~
          mtcars %>% 
            filter(gear == 4) %>% 
            group_by(Variable = .x, Value = !!rlang::sym(.x))  %>% 
            summarise(n = n()) %>% 
            mutate(perc = n/sum(n) * 100))
    # A tibble: 4 x 4
    # Groups:   Variable [2]
    #  Variable Value     n  perc
    #  <chr>    <dbl> <int> <dbl>
    #1 am           0     4  33.3
    #2 am           1     8  66.7
    #3 vs           0     2  16.7
    #4 vs           1    10  83.3
    

    或者另一种选择是使用pivot_longer 转换为“长”格式

    library(tidyr)
    mtcars %>% 
        filter(gear == 4) %>%
        select(vs, am) %>% 
        pivot_longer(everything()) %>% 
        count(name, value) %>% 
        mutate(perc = n/sum(n) * 100)
    

    【讨论】:

    • 有没有办法选择所有 180 个变量而不用输入它们?比如保存名字?如果是这样,那将如何进入选择步骤或映射步骤?谢谢
    • @PinkyL 在我的第二个解决方案中,所需条件是filtering,select 这里只有两个变量。如果您想要所有变量,那么您可以跳过select 步骤并使用pivot_longer(everything())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多