【发布时间】: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