Поскольку ваш фрейм данных содержит ID для 2 миллионов сотрудников, возможно, решение с функциями melt
и dcast
из пакета data.table
будет для вас быстрее:
library(data.table)
setDT(dt)
Col <- paste("Q",1:4,sep = "")
dt.m <- melt(dt, measure = list(Col), variable.name = "quarter", value.name = "value")
dt.m <- dt.m[value == 1]
dt.m[,value:= NULL]
dt.m <- dcast(dt.m, ID~quarter, value.var = "NAICS")
ID Q1 Q2 Q3 Q4
1: A 100 100 100 100
2: B 200 200 100 100
Воспроизводимые данные
dt <- data.frame(ID = c("A","B","B"),
NAICS = c(100,200,100),
Q1 = c(1,1,0),
Q2 = c(1,1,0),
Q3 = c(1,0,1),
Q4 = c(1,0,1))