【问题标题】:How to filter for frequency across two categorical variables in data set?如何过滤数据集中两个分类变量的频率?
【发布时间】:2019-04-29 06:58:24
【问题描述】:

我有兴趣弄清楚失业人员的频率,这些人在我的数据集中也是非裔美国人/黑人。我有一个大型数据集,其中包括变量 OCC(失业人员编码为 0)和种族(AA/Black 编码为 2)。

我尝试通过 tidyverse 使用 group(by) 函数,但我认为我这样做可能不正确,因为我收到以下错误消息。

这是代码:

RACE <- group_by(cps_data, OCC, RACE)
occupation <- summarise(RACE,
                   count = n(),
                   OCC = mean(OCC, na.rm = TRUE)
)


summarise(RACE, occupation = mean(OCC, na.rm = TRUE))

我创建的职业对象给了我错误信息:

Error in summarise_impl(.data, dots) : 
  Column `OCC` can't be modified because it's a grouping variable

summary 函数给了我一个看起来不是很有帮助的 tibble:

# A tibble: 1,374 x 3
# Groups:   OCC [?]
     OCC  RACE occupation
   <int> <int>      <dbl>
 1     0     1          0
 2     0     2          0
 3     0     3          0
 4     0     4          0
 5     0     5          0
 6     0     6          0
 7     0     7          0
 8     0     8          0
 9     0     9          0
10    10     1         10

这是我的一些数据 - 我试图为你们复制以帮助你们帮助我。您会看到,上面我制作了另一个数据框,只包含 OCC 和 RACE,因为它们是目前唯一相关的因素。

dput(head(cps_data,4))
structure(list(YEAR = c(2015L, 2015L, 2015L, 2015L), DATANUM = c(1L, 
1L, 1L, 1L), SERIAL = c(1029644L, 1029644L, 1029705L, 1029708L
), CBSERIAL = c(403, 403, 1944, 1964), HHWT = c(194L, 194L, 142L, 
77L), STATEICP = c(14L, 14L, 14L, 14L), STATEFIP = c(42L, 42L, 
42L, 42L), CITY = c(5330L, 5330L, 5330L, 5330L), GQ = c(1L, 1L, 
1L, 1L), PERNUM = c(1L, 3L, 1L, 1L), PERWT = c(194L, 140L, 142L, 
78L), SEX = c(2L, 1L, 2L, 1L), AGE = c(37L, 35L, 60L, 41L), RACE = c(1L, 
1L, 2L, 2L), RACED = c(100L, 100L, 200L, 200L), OCC = c(800L, 
6260L, 0L, 350L), IND = c(7270L, 770L, 0L, 8190L), INCWAGE = c(75000L, 
25000L, 0L, 83000L)), row.names = c(NA, 4L), class = "data.frame")

我希望得到一个输出,显示失业人数,他们也被识别为非裔美国人/黑人,以便我可以比较我的数据集。

【问题讨论】:

  • 您可能需要ungroup 并单独按RACE 分组,即RACE %&gt;% group_by(RACE) %&gt;% summarise(n = n(), OCC = mean(OCC, na.rm = TRUE))

标签: r dplyr


【解决方案1】:

如果我理解正确,你就快到了。

df %>%
    group_by(OCC, RACE) %>%
    summarize(count = n())

# A tibble: 4 x 3
# Groups:   OCC [4]
    OCC  RACE count
  <int> <int> <int>
1     0     2     1
2   350     2     1
3   800     1     1
4  6260     1     1

数据

library(tidyverse)
df <- structure(list(YEAR = c(2015L, 2015L, 2015L, 2015L), DATANUM = c(1L, 
    1L, 1L, 1L), SERIAL = c(1029644L, 1029644L, 1029705L, 1029708L
    ), CBSERIAL = c(403, 403, 1944, 1964), HHWT = c(194L, 194L, 142L, 
    77L), STATEICP = c(14L, 14L, 14L, 14L), STATEFIP = c(42L, 42L, 
    42L, 42L), CITY = c(5330L, 5330L, 5330L, 5330L), GQ = c(1L, 1L, 
    1L, 1L), PERNUM = c(1L, 3L, 1L, 1L), PERWT = c(194L, 140L, 142L, 
    78L), SEX = c(2L, 1L, 2L, 1L), AGE = c(37L, 35L, 60L, 41L), RACE = c(1L, 
    1L, 2L, 2L), RACED = c(100L, 100L, 200L, 200L), OCC = c(800L, 
    6260L, 0L, 350L), IND = c(7270L, 770L, 0L, 8190L), INCWAGE = c(75000L, 
    25000L, 0L, 83000L)), row.names = c(NA, 4L), class = "data.frame")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    相关资源
    最近更新 更多