如何根据组值创建新变量?

How to create a new variable based on group values?

提问人:Danika 提问时间:4/28/2023 更新时间:4/28/2023 访问量:45

问:

我正在处理一些调查数据,我正在尝试创建一个新的变量“人口”,即一个群体中的人数(更具体地说是性别和种族)。我已经能够使用该信息创建一个新的数据帧,但我无法将这些值分配回原始数据。

我尝试了以下代码:

#create new dataframe with population by groups
population <- age_data %>% group_by(RACE, SEX) %>% summarise(count = n())

#create new variable with the count
age_data$population <- ifelse(population$RACE== age_data$RACE& population$SEX == age_data$SEX, population$count, NA)

我也尝试过类似的语言和基本语法,但我会得到以下输出的一些变体:case_when()

Error in `stop_vctrs()`:
! Can't recycle `..1` (size 24) to match `..2` (size 169588).
Backtrace:
 1. base::ifelse(...)
 5. vctrs::stop_incompatible_size(...)
 6. vctrs:::stop_incompatible(...)
 7. vctrs:::stop_vctrs(...)

我想我明白问题在于我只创建了 24 个类别,但我找不到解决这个问题的方法。

以下是示例(简化)数据:

SEX     RACE
1       1
2       3        
1       1
1       2
2       3
2       1
1       3

我想要的是这个:

SEX     RACE     POPULATION
1       1        2
2       3        2
1       1        2
1       2        1
2       1        1
2       3        2
1       3        1

我可以手动打印和分配人口值,但我相信有一种更优雅的方法可以做到这一点。

r dplyr tidyverse 数据操作

评论

1赞 one 4/28/2023
替换为summarisemutate
0赞 Gregor Thomas 4/28/2023
summarize将数据压缩为每组一行。 将列添加到现有数据中。mutate
1赞 Gregor Thomas 4/28/2023
对于这种常见情况,您还可以使用专用的帮助程序函数。add_countadd_count(age_data, RACE, SEX, name = "count")
0赞 Danika 4/28/2023
大家好!对不起,后来的回复。我尝试将摘要更改为突变,但现在 data$population 是一个 tibble 而不是变量,所以我不能在图形等中使用它。 有什么想法吗?
0赞 Danika 4/28/2023
@GregorThomas add_count功能效果很好 - 我只是对我遇到的小东西感到好奇。谢谢!

答: 暂无答案