替代不折叠df的聚合函数

时间:2016-10-26 20:42:16

标签: r count aggregate

我有人级数据,想要创建一个包含一个家庭中孩子数量的新变量。我为孩子们创建了一个虚拟变量(如果年龄为1,则为1,否则为0)。我目前正在使用聚合函数,其中HH_ID是家庭标识符。

 No_kids <- aggregate(child ~ HH_ID, data = df, sum)

此代码有效但数据框崩溃,而我想为每个家庭的每个观察分配孩子的数量。是否有一个不会折叠数据集的聚合函数的替代方法?

3 个答案:

答案 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"))