我有一个问题。我的数据集包含有关工人和公司的信息。我想要计算的是所有雇用工人的公司中特定年龄组的同事人数。我找到了解决方案。
以下是模拟数据集和解决方案:
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)我有一种直觉,我正在做一些重复的操作,这是可以避免的。