我正在使用R处理人口普查数据,这是一个非常大的案例,有超过一千万个案例。我想计算每个唯一家庭的孩子数量(具有自己的ID),并创建一个记录结果的新变量。
人口普查数据作为数据帧存储在R中,它看起来像:
(家庭ID,儿童或成人的标识符)
行类似于:
#Household ID, identifier of children or adult
#1: 1, 3
#2: 1, 1
#3: 2, 1
#4: 3, 1
......
成人1个,儿童3个
我想要的是: (家庭ID,儿童或成人的标识符,该家庭中的儿童数量)
#Household ID, identifier of children or adult, number of children
#1: 1, 3, 1
#2: 1, 1, 1
#3: 2, 1, 0
#4: 3, 1, 1
#5: 3, 3, 1
......
我试图使用函数长度,但是只想出了一种循环的方法,这花了我一周的时间,但现在我没有那么多时间。
答案 0 :(得分:0)
您可以计算每个家庭中3的数目,并将其添加为新列。在将数据读入R后,假设您的数据帧称为df
,我们可以使用data.table
library(data.table)
setDT(df)[, no_of_child := sum(Child_Adult == 3), by = Household_ID]
df
# Household_ID Child_Adult no_of_child
#1: 1 3 1
#2: 1 1 1
#3: 2 1 0
#4: 3 1 0
在基数R中,
df$no_of_child <- with(df, ave(Child_Adult == 3, Household_ID, FUN = sum))
或使用dplyr
library(dplyr)
df %>%
group_by(Household_ID) %>%
mutate(no_of_child = sum(Child_Adult == 3))
数据
df <- structure(list(Household_ID = c(1L, 1L, 2L, 3L), Child_Adult = c(3L,
1L, 1L, 1L)), class = "data.frame", row.names = c(NA, -4L))