我正在尝试学习当感兴趣的列是列表(或向量)时为数据表创建新列的推荐方法,并且选择是相对于另一列完成的,并且可能会进行初步选择作为一部分一条链子 .

考虑这些名为(tmp)的数据 . 我们希望找到sacStartT的最小值大于stimTime(在实际数据中,这些中的一个或另一个可能是空的并且不存在最小值) .

tmp = data.table("pid" = c(14,14,9,9),"trialNumber" = c(25,26,25,26),"stimTime" = c(100,200,1,2),"sacStartT" = list(c(98,99,101,102), c(201,202), c(5), c(-2,-3,3)))

这有效:

tmp[,"mintime" := as.integer(min(unlist(sacStartT)[unlist(sacStartT)>stimTime])),by=seq_len(nrow(tmp))]

但是,如果我想首先选择数据,我不知道如何获得逐行分析的行号,例如

tmp[pid == 9][,"mintime" := as.integer(min(unlist(sacStartT)[unlist(sacStartT)>stimTime])),by=seq_len(nrow(.N))]

失败,因为 .N 指的是tmp中的行数,而不是链中的子集 .

总之,问题是:

  • 建议进行逐行分析?

  • 如何在链中找到by参数的正确数字?

  • 处理包含列表的data.table元素的建议?你只需要手动取消所有这些吗?