提问人:shollaback 提问时间:7/1/2023 最后编辑:Philshollaback 更新时间:7/1/2023 访问量:47
在 3 个可变因子内获得计数
Obtain counts within 3 variable factors
问:
我有一个敏感的数据集,所以我在这里创建了一个模拟数据集来展示。
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-这也是我在这里的第一篇帖子,如果我做错了什么,请告诉我如何改进我未来的帖子!
答:
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
它们(预先)被委托给变量。尝试检查或添加另一个管道后喜欢n
a <- df |> dplyr::group_by( etc )
a
dplyr::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
没关系,谢谢
上一个:雨云图上的缩放问题
下一个:如何一次更改多个因素的水平
评论