Я только что удалил as.data.frame()
. Я использовал соединения, чтобы правильно выровнять сумму size
по panelID
.
Чего я не понимаю, так это того, хотите ли вы значения panelID
, для которых вы удовлетворяете условию, заданному суммой, я думаю, что panelID
. Или, если вы хотите, сколько panelID
(то есть человек?) Удовлетворяют условию.
В первом случае вот что вы делаете:
panelID = c(1:50)
year = c(2001:2010)
country = c("NLD", "BEL", "GER")
urban = c("A", "B", "C")
indust = c("D", "E", "F")
sizes = c(1, 2, 3, 4, 5)
n <- 2
library(data.table)
set.seed(123)
DT <- data.table(
panelID = rep(sample(panelID), each = n),
country = rep(sample(country, length(panelID), replace = T), each = n),
year = c(replicate(length(panelID), sample(year, n))),
some_NA = sample(0:5, 6),
some_NA_factor = sample(0:5, 6),
industry = rep(sample(indust, length(panelID), replace = T), each = n),
urbanisation = rep(sample(urban, length(panelID), replace = T), each = n),
size = rep(sample(sizes, length(panelID), replace = T), each = n),
norm = round(runif(100)/10, 2),
sales = round(rnorm(10, 10, 10), 2),
Happiness = sample(10, 10),
Sex = round(rnorm(10, 0.75, 0.3), 2),
Age = sample(100, 100),
Educ = round(rnorm(10, 0.75, 0.3), 2)
)
DT [, uniqueID := .I] # Creates a unique ID
DT[DT == 0] <- NA
DT$sales[DT$sales< 0] <- NA
dt_sum = DT[ , .(size_sum = sum(size) ), by = panelID ]
setkey( dt_sum, panelID )
setkey( DT, panelID )
DT = DT[ dt_sum ]
final = DT[ size_sum == 8, .N, by = panelID ]
> final
panelID N
1: 6 2
2: 8 2
3: 9 2
4: 11 2
5: 18 2
6: 22 2
7: 28 2
8: 30 2
9: 31 2
10: 38 2
Во втором случае вы просто считаете количество строк final
:
> nrow( final )
6