【发布时间】:2016-03-04 16:08:06
【问题描述】:
作为这个老歌但好人的后续行动:efficient row-wise operations on a data.table
我有一些数据(不幸的是)看起来像:
library('data.table')
set.seed(1234)
m <- 5
n <- 7
rb <- function() runif(m,1000,2000) * rbinom(m,1,0.5)
series_col_nms <- paste0('YearNo',1:n)
rev <- data.table(cust_id = paste0('CustNo',1:m),
other_stuff = sample(letters,m, replace=TRUE))
for(col in series_col_nms){
set(rev, j=col, value=rb())
}
setkey(rev, cust_id)
每个客户一行,包含不同列,包括第 1 年、第 2 年、...的年收入
我想获取每个客户的任何收入的第一年和最后一年的年度指数。
我可以产生想要的结果,但加入有点麻烦:
years_active <- rev[, which(.SD>0), .SDcols = series_col_nms,
keyby=cust_id][, .(min_year_active = min(V1),
max_year_active = max(V1)), keyby=cust_id]
years_active[rev]
这些获取最小索引的尝试失败:
rev[, apply(.SD, 1, function(x) min(which(x>0))), .SDcols=series_col_nms, by=cust_id] # returns data type error
rev[, do.call(pmin, lapply(.SD, function(x) which(x>0))), .SDcols=series_col_nms, by=cust_id] # returns empty
data.table 的方法是什么?
【问题讨论】:
标签: r data.table time-series