data.table fcase 默认选项

问题描述 投票:0回答:1

我正在尝试从 dplyr case_when 更改为 data.table fcase 函数以解决速度问题。

我在 case_when 中的原始脚本如下所示:

df = dplyr::mutate(df, x = dplyr::case_when(
  col1 == "a" & col2 == "b" ~ "m1",
  col2 == "b" & col1 == "a"  ~ "m2",
  TRUE ~ x
))

因此,如果没有满足任何条件,我只需保留原始列值。我正在尝试对 fcase 做同样的事情:

df = setDT(df)[, x := fcase(
  col1 == "a" & col2 == "b", "m1",
  col2 == "b" & col1 == "a", "m2",
  default = x
)]

但是,当我尝试运行此程序时,出现以下错误:

Error in fcase(col1 == "a" & col2 ==  : 
  Length of 'default' must be 1.

如果我将默认值设置为任何字符串,它就可以正常工作。如果可能的话,谁能告诉我如何使用 fcase 复制我的 case_when 代码?谢谢!

r data.table
1个回答
0
投票

虽然它可能不那么优雅,但我使用

rep(TRUE, .N)

DT <- data.table(i = 1:6)
DT[, v := fcase(i %in% c(1,3), "A", i %in% c(2), "B",
                rep(TRUE, .N), as.character(i))][]
#        i      v
#    <int> <char>
# 1:     1      A
# 2:     2      B
# 3:     3      A
# 4:     4      4
# 5:     5      5
# 6:     6      6
© www.soinside.com 2019 - 2024. All rights reserved.