[英]Alternative to aggregate function that doesn't collapse df
我有個人數據,想創建一個新變量,該變量具有一個家庭中孩子的數量。 我為孩子們創建了一個虛擬變量(如果年齡<18,則為1,否則為0)。 我當前正在使用聚合函數,其中HH_ID是住戶標識符。
No_kids <- aggregate(child ~ HH_ID, data = df, sum)
這段代碼有效,但數據框崩潰了,而我想為該家庭的每個觀測值分配孩子的數量。 聚合函數是否有替代方法,不會折疊數據集?
另一個選擇是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
使用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()
或者,您可以在聚合后進行merge
(因此在基本R中):
ag <- aggregate(child ~ HH_ID, data = df, sum)
setNames(merge(df, ag, by="HH_ID"), c("HH_ID", "child", "No_kids"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.