我有人员级别的数据,并希望创建一个新的变量,其中包含一个家庭中的孩子数量。我为孩子们创建了一个虚拟变量(如果年龄为<,则为1,否则为0)。我目前正在使用聚合函数,其中HH_ID是家庭标识符。聚合函数的替代方法,不崩溃df
No_kids <- aggregate(child ~ HH_ID, data = df, sum)
此代码有效,但数据框崩溃,而我想为该家庭的每个观察分配孩子的数量。是否有一个替代集合函数不会折叠数据集?
我有人员级别的数据,并希望创建一个新的变量,其中包含一个家庭中的孩子数量。我为孩子们创建了一个虚拟变量(如果年龄为<,则为1,否则为0)。我目前正在使用聚合函数,其中HH_ID是家庭标识符。聚合函数的替代方法,不崩溃df
No_kids <- aggregate(child ~ HH_ID, data = df, sum)
此代码有效,但数据框崩溃,而我想为该家庭的每个观察分配孩子的数量。是否有一个替代集合函数不会折叠数据集?
另外,您可以在聚合后做一个merge
(所以在R中):
ag <- aggregate(child ~ HH_ID, data = df, sum)
setNames(merge(df, ag, by="HH_ID"), c("HH_ID", "child", "No_kids"))
计算不是最优雅的一段代码,而是适应你的建议工作:ag < - 聚合(孩子〜HH_ID,数据= df,总和) test < - merge(df,ag,by =“HH_ID”) df $ No_kids < - test $ child.y – ClaireS
另一个选择是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
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
唉,只是第二太慢:) –
你应该小心使用n(),因为OP在它们的HH_ID组中都有零和1,它们都将被n() –
使用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()
看看'ave'并阅读[mcve]关于如何在SO上提出问题。 –
如果您将No_kids数据框与您的原始数据帧合并,基于'HH_ID',是不是会得到您想要的? –