使用 fcase 评估该行时,以下代码会引发错误。
library(data.table)
library(dplyr)
tbl.test <- data.table(x = 0.5*(1:2))
tbl.test[, .(fcase(x < 1, x+1,
default = x))]
tbl.test[, .(case_when(x < 1 ~ x+1,
TRUE ~ x)
)]
Run Code Online (Sandbox Code Playgroud)
当我以这种方式使用 case_when 时(对于大多数复杂的东西..),我想切换到 fcase,希望能真正提高性能..
有谁知道 fcase 的这种用法到底隐藏在哪里吗?关键是我不能使用表的列作为 fcase 的默认值..
这是这个问题的后续:data.table 高效回收
这里的区别在于,每条线的未来年份数不一定相同..
我经常在 data.table 中使用回收,例如当我需要预测未来几年时。我会重复未来每年的原始数据。
这可能会导致类似的情况:
library(data.table)
dt <- data.table(1:500000, 500000:1, rpois(500000, 240))
dt2 <- dt[, c(.SD, .(year = 1:V3)), by = 1:nrow(dt) ]
Run Code Online (Sandbox Code Playgroud)
但我经常需要处理数百万行,以及比这个玩具示例多得多的列。时间增加..试试这个:
library(data.table)
dt <- data.table(1:5000000, 5000000:1, rpois(5000000, 240))
dt2 <- dt[, c(.SD, .(year = 1:V3)), by = 1:nrow(dt) ]
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有更有效的方法来达到这个目的?
谢谢你的帮助 !