data.table相当于dplyr的bang bang (!!)
data.table's equivalent of dplyr's bang bang (!!)
假设我有下面的 DT
和 ID
:
library(data.table)
DT <- data.table(
ID = c("b","b","b","a","a","c"),
a = 1:6,
b = 7:12,
c = 13:18
)
ID <- "b"
DT
#> ID a b c
#> 1: b 1 7 13
#> 2: b 2 8 14
#> 3: b 3 9 15
#> 4: a 4 10 16
#> 5: a 5 11 17
#> 6: c 6 12 18
是否有 {data.table}
相当于 {dplyr}
的:
DT |> dplyr::filter(ID == !!ID)
#> ID a b c
#> 1: b 1 7 13
#> 2: b 2 8 14
#> 3: b 3 9 15
假设我不更改变量的名称。
是的,只需将变量包装在 as.name()
:
DT[ID == as.name(ID)]
# ID a b c
# 1: b 1 7 13
# 2: b 2 8 14
# 3: b 3 9 15
我喜欢 VitaminB16 的答案在 data.table::[
的 i=
(以及 j=
)部分有效。但是,我相信 canonical 对从调用环境引用对象的响应是 ..
-operator,在这里讨论:https://rdatatable.gitlab.io/data.table/articles/datatable-intro.html
很遗憾,它在 i=
、
中不起作用
DT[ID == ..ID,]
# Error in eval(stub[[3L]], x, enclos) : object '..ID' not found
所以必须放在一个.SD
。 (我相信这在 .SD
的 i=
中有效,因为它最初是在 DT
的 j=
中评估的......可能很复杂。)
DT[, .SD[ID == ..ID,] ]
# ID a b c
# <char> <int> <int> <int>
# 1: b 1 7 13
# 2: b 2 8 14
# 3: b 3 9 15
使用on
:
DT[ID, on = "ID"]
#> ID a b c
#> 1: b 1 7 13
#> 2: b 2 8 14
#> 3: b 3 9 15
语法为:DT[row_value, on = c("variable")]
运行此命令了解更多信息:
vignette("datatable-secondary-indices-and-auto-indexing")
假设我有下面的 DT
和 ID
:
library(data.table)
DT <- data.table(
ID = c("b","b","b","a","a","c"),
a = 1:6,
b = 7:12,
c = 13:18
)
ID <- "b"
DT
#> ID a b c
#> 1: b 1 7 13
#> 2: b 2 8 14
#> 3: b 3 9 15
#> 4: a 4 10 16
#> 5: a 5 11 17
#> 6: c 6 12 18
是否有 {data.table}
相当于 {dplyr}
的:
DT |> dplyr::filter(ID == !!ID)
#> ID a b c
#> 1: b 1 7 13
#> 2: b 2 8 14
#> 3: b 3 9 15
假设我不更改变量的名称。
是的,只需将变量包装在 as.name()
:
DT[ID == as.name(ID)]
# ID a b c
# 1: b 1 7 13
# 2: b 2 8 14
# 3: b 3 9 15
我喜欢 VitaminB16 的答案在 data.table::[
的 i=
(以及 j=
)部分有效。但是,我相信 canonical 对从调用环境引用对象的响应是 ..
-operator,在这里讨论:https://rdatatable.gitlab.io/data.table/articles/datatable-intro.html
很遗憾,它在 i=
、
DT[ID == ..ID,]
# Error in eval(stub[[3L]], x, enclos) : object '..ID' not found
所以必须放在一个.SD
。 (我相信这在 .SD
的 i=
中有效,因为它最初是在 DT
的 j=
中评估的......可能很复杂。)
DT[, .SD[ID == ..ID,] ]
# ID a b c
# <char> <int> <int> <int>
# 1: b 1 7 13
# 2: b 2 8 14
# 3: b 3 9 15
使用on
:
DT[ID, on = "ID"]
#> ID a b c
#> 1: b 1 7 13
#> 2: b 2 8 14
#> 3: b 3 9 15
语法为:DT[row_value, on = c("variable")]
运行此命令了解更多信息:
vignette("datatable-secondary-indices-and-auto-indexing")