Rに次のdata.tableがあるとしましょう。
require(data.table)
dt <- data.table(ID = paste0("x", 1:5),
TV.Show=c("Farscape", "Farscape", "Star Trek", "Doctor Who", "Doctor Who"),
Date = seq(as.Date("2014/01/01"), as.Date("2014/01/05"), "days"),
Ratings.North = c(1.1, 0.9, 4.8, 3.4, 5.5),
Ratings.South= c(0.1, NA, 1.8, 3.1, 3.5))
setkey(dt, "TV.Show")
dt
# ID TV.Show Date Ratings.North Ratings.South
# x4 Doctor Who 2014-01-04 3.4 3.1
# x5 Doctor Who 2014-01-05 5.5 3.5
# x1 Farscape 2014-01-01 1.1 0.1
# x2 Farscape 2014-01-02 0.9 NA
# x3 Star Trek 2014-01-03 4.8 1.8
このdata.tableを「TV.Show」でグループ化して、次のように減らしたいと思います。
つまり、次のdata.tableを作成したいと思います。
# ID TV.Show Date Ratings.North Ratings.South
# x4 Doctor Who 2014-01-04 8.9 6.6
# x1 Farscape 2014-01-01 2.0 0.1
# x3 Star Trek 2014-01-03 4.8 1.8
使用しifelse
ますか?
dt[, lapply(.SD, function(x) {
ifelse(is.numeric(x), sum(x, na.rm = TRUE), x[1])
}), by = key(dt)]
# TV.Show ID Date Ratings.North Ratings.South
# 1: Doctor Who x4 16074 8.9 6.6
# 2: Farscape x1 16071 2.0 0.1
# 3: Star Trek x3 16073 4.8 1.8
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加