簡體   English   中英

不會折疊df的聚合函數的替代方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM