在data.table中应用多个维度的函数,不包括观察

时间:2017-02-16 13:55:06

标签: r data.table

我有一个问题。我的数据集包含有关工人和公司的信息。我想要计算的是所有雇用工人的公司中特定年龄组的同事人数。我找到了解决方案。

以下是模拟数据集和解决方案:

library(data.table)
set.seed(10)

#Define number of observations:
nr_obs <- 10000

#Simulate data:
data <- data.table(
  work_id=sample(seq(1,100), nr_obs, replace=TRUE),
  firm_id=sample(seq(1,100), nr_obs, replace=TRUE)
)

age <- data.table(work_id = unique(data$work_id),
                  age = sample(seq(1,10),10,replace=TRUE))
data <- merge(data,age,by=c("work_id"))
data <- unique(data,by=c("work_id","firm_id"))

# my solution:
data <- data[,nr_young_peers:={V1 = .(list(firm_id));
                               V2=data[which(firm_id %in% unlist(V1))];
                               V3=dim(V2[age>=3&age<=4,][work_id!=.BY[[1]],])[1]},
                               by=c("work_id")]

unique(data[work_id==1,]$nr_young_peers)
## [1] 754
dim(data[which(firm_id %in% data[work_id==1,]$firm_id),][age>=3 & age<=4 & work_id!=1,])[1]
## [1] 754

此解决方案存在两个问题: 1)观察次数不能很好地扩展; 2)我有一种直觉,我正在做一些重复的操作,这是可以避免的。

0 个答案:

没有答案