我有人级数据,想要创建一个包含一个家庭中孩子数量的新变量。我为孩子们创建了一个虚拟变量(如果年龄为1,则为1,否则为0)。我目前正在使用聚合函数,其中HH_ID是家庭标识符。
No_kids <- aggregate(child ~ HH_ID, data = df, sum)
此代码有效但数据框崩溃,而我想为每个家庭的每个观察分配孩子的数量。是否有一个不会折叠数据集的聚合函数的替代方法?
答案 0 :(得分:1)
另一种选择是dplyr ......当然
library(dplyr)
> player_df = data.frame(team = c('ARI', 'BAL', 'BAL', 'CLE', 'CLE'),
+ player =c('A', 'B', 'C', 'D', 'F'),
+ '1' = floor(runif(5, min=1, max=2)*10),
+ '2' = floor(runif(5, min=1, max=2)*10))
然后使用group_by和dplyr中的mutate
player_df %>% group_by(team) %>% mutate(count = n())
Source: local data frame [5 x 5]
Groups: team [3]
team player X1 X2 count
<fctr> <fctr> <dbl> <dbl> <int>
1 ARI A 12 12 1
2 BAL B 10 12 2
3 BAL C 14 12 2
4 CLE D 10 14 2
5 CLE F 18 17 2
答案 1 :(得分:0)
使用dplyr
包:
# Create sample data
set.seed(3252)
df <- data.frame(
HH_ID = sample(1:10, 50, replace = TRUE),
child = sample(0:1, 50, replace = TRUE)
)
# Count number of children
df %>%
group_by(HH_ID) %>%
mutate(child_count = sum(child)) %>%
ungroup()
答案 2 :(得分:0)
或者,你可以在聚合后做merge
(所以在基础R中):
ag <- aggregate(child ~ HH_ID, data = df, sum)
setNames(merge(df, ag, by="HH_ID"), c("HH_ID", "child", "No_kids"))