如何根据某些条件创建新的变量来计算重复行

时间:2019-08-30 02:04:47

标签: r count duplicates

我正在使用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
......

我试图使用函数长度,但是只想出了一种循环的方法,这花了我一周的时间,但现在我没有那么多时间。

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))