在 3 个可变因子内获得计数

Obtain counts within 3 variable factors

提问人:shollaback 提问时间:7/1/2023 最后编辑:Philshollaback 更新时间:7/1/2023 访问量:47

问:

我有一个敏感的数据集,所以我在这里创建了一个模拟数据集来展示。

data.frame(
  Year = c("2010", "2010", "2010", "2011", "2011", "2012", "2013", "2013", "2013"),
  Race = c("White", "White", "Asian", "White", "Black", "Black", "Unknown", "Unknown", "White"),
  Ethnicity = c("Hispanic", "Hispanic", "Not Hispanic", "Hispanic", "Not Hispanic", "Not Hispanic", "Unknown", "Hispanic", "Not Hispanic")
)

 Year    Race    Ethnicity
1 2010   White     Hispanic
2 2010   White     Hispanic
3 2010   Asian Not Hispanic
4 2011   White     Hispanic
5 2011   Black Not Hispanic
6 2012   Black Not Hispanic
7 2013 Unknown      Unknown
8 2013 Unknown     Hispanic
9 2013   White Not Hispanic

实际上,我有一个从 2010 年到 2021 年的数据集,总共 12 年。还有大约 6/7 个种族类别,以及 3 个不同的种族答案(西班牙裔/拉丁裔,不是西班牙裔/拉丁裔,未知)。

我正在尝试获取每年、种族和民族的计数(例如,2010 年白人西班牙裔、2010 年非西班牙裔白人、2010 年亚洲西班牙裔、2010 年亚洲非西班牙裔等)。我目前正在使用这个函数来拉计数-

raceethfunc <- function(x,y,z){
df %>% filter(Race == x & Ethnicity == y and Year = z) %>%
nrow()
}

H_white2010 <- raceethfunc(x = "White", y = "Hispanic or Latino", z = "2010")
H_white2011 <- raceethfunc(x = "White", y = "Hispanic or Latino", z = "2011")
H_white2012 <- raceethfunc(x = "White", y = "Hispanic or Latino", z = "2012")

等。。。

我必须为每一年、种族和民族这样做,这意味着我必须复制和粘贴 200+ 行代码来更改一行中的年份,或者另一行中的种族,这是一种非常低效的方式。

我是编码的新手,但功能尤其如此。我尝试使用 for() 循环,但无法理解如何让它运行,任何关于循环的指导或更有效的方法来解决这个问题将不胜感激。

PS-这也是我在这里的第一篇帖子,如果我做错了什么,请告诉我如何改进我未来的帖子!

R 因子

评论


答:

0赞 Grzegorz Sapijaszko 7/1/2023 #1

group_by和 from package,例如:count{dplyr}

df <- data.frame(
  Year = c("2010", "2010", "2010", "2011", "2011", "2012", "2013", "2013", "2013"),
  Race = c("White", "White", "Asian", "White", "Black", "Black", "Unknown", "Unknown", "White"),
  Ethnicity = c("Hispanic", "Hispanic", "Not Hispanic", "Hispanic", "Not Hispanic", "Not Hispanic", "Unknown", "Hispanic", "Not Hispanic")
)

df |>
  dplyr::group_by(Year, Race, Ethnicity) |>
  dplyr::count()
#> # A tibble: 8 × 4
#> # Groups:   Year, Race, Ethnicity [8]
#>   Year  Race    Ethnicity        n
#>   <chr> <chr>   <chr>        <int>
#> 1 2010  Asian   Not Hispanic     1
#> 2 2010  White   Hispanic         2
#> 3 2011  Black   Not Hispanic     1
#> 4 2011  White   Hispanic         1
#> 5 2012  Black   Not Hispanic     1
#> 6 2013  Unknown Hispanic         1
#> 7 2013  Unknown Unknown          1
#> 8 2013  White   Not Hispanic     1

创建于 2023-06-30 with reprex v2.0.2

评论

0赞 shollaback 7/1/2023
非常感谢。快速问题 - 有没有办法将这些计数/值分配给变量,以便我可以操作它们?
0赞 Grzegorz Sapijaszko 7/1/2023
它们(预先)被委托给变量。尝试检查或添加另一个管道后喜欢na <- df |> dplyr::group_by( etc )adplyr::count()dplyr::count() |> dplyr::mutate(myVariable = n)
0赞 shollaback 7/3/2023
太棒了,谢谢!
1赞 jkatam 7/1/2023 #2

或者,我们可以用来按组获取计数,也可以命名计数变量add_count

library(dplyr)

df %>% add_count(Year, Race, Ethnicity, name = 'n') 

创建于 2023-06-30 with reprex v2.0.2

  Year    Race    Ethnicity n
1 2010   White     Hispanic 2
2 2010   White     Hispanic 2
3 2010   Asian Not Hispanic 1
4 2011   White     Hispanic 1
5 2011   Black Not Hispanic 1
6 2012   Black Not Hispanic 1
7 2013 Unknown      Unknown 1
8 2013 Unknown     Hispanic 1
9 2013   White Not Hispanic 1

评论

0赞 jkatam 7/2/2023
如果您喜欢这个答案,请您投赞成票。
1赞 shollaback 7/3/2023
我会的,但它告诉我,如果我没记错的话,我至少需要 15 个声誉才能这样做......我很抱歉,因为它非常有帮助,但甚至不知道如何获得声誉哈哈......
0赞 jkatam 7/3/2023
没关系,谢谢