Данные:
set.seed(42)
df1 = data.frame(
Date = seq.Date(as.Date("2018-01-01"),as.Date("2018-01-30"),1),
value = sample(1:30),
Y = sample(c("yes", "no"), 30, replace = TRUE)
)
df2 = data.frame(
Date = seq.Date(as.Date("2018-01-01"),as.Date("2018-01-30"),7)
)
Для суммы, если данные попадают в диапазон, это работает (из моего предыдущего вопроса):
library(data.table)
df1$start <- df1$Date
df1$end <- df1$Date
df2$start <- df2$Date
df2$end <- df2$Date + 6
setDT(df1, key = c("start", "end"))
setDT(df2, key = c("start", "end"))
d = foverlaps(df1, df2)[, list(mySum = sum(value)), by = Date ]
Как я могу сделать countif ?
потому что когда я пытаюсь
d = foverlaps(df1, df2)[, list(mySum = count(value)), by = Date ]
я получаю сообщение об ошибке
no applicable method for 'groups' applied to an object of class "c('double', 'numeric')"
Вместо list(mySum = count(value))
попробуйте c(mySum = count(value))
. Код работает для меня тогда.
d2 <- foverlaps(df1, df2)[, c(mySum = count(value)), by = Date ]
Запускается у меня без проблем. Какую версию data.table вы используете?
Последняя версия.
Ах. Я вижу свою проблему, вы используете count() из dplyr, в то время как у меня был загружен plyr count(). С count() от plyr это работает. Пожалуйста, добавьте все необходимые пакеты, чтобы пример работал в следующий раз.
d = foverlaps(df1, df2)[, .N, by = Date]
Мы можем использовать .N
:
foverlaps(df1, df2)[, list(myCount = .N), by = Date ]
# Date myCount
# 1: 2018-01-01 7
# 2: 2018-01-08 7
# 3: 2018-01-15 7
# 4: 2018-01-22 7
# 5: 2018-01-29 2
Если вы хотите подсчитать количество строк на дату, вы можете попробовать .N
foverlaps(df1, df2)[, .(mysum = .N), by = Date ]
Date mysum
1: 2018-01-01 7
2: 2018-01-08 7
3: 2018-01-15 7
4: 2018-01-22 7
5: 2018-01-29 2
Если вы хотите подсчитать количество уникальных значений за дату, вы можете попробовать uniqueN()
foverlaps(df1, df2)[, .(mysum = uniqueN(value)), by = Date ]
Date mysum
1: 2018-01-01 7
2: 2018-01-08 7
3: 2018-01-15 7
4: 2018-01-22 7
5: 2018-01-29 2
И .N
, и uniqueN()
взяты из {data.table}
.
Откуда эта функция
count
?dplyr
? Связанный, возможный дубликат: stackoverflow.com/questions/9809166/…