gpt4 book ai didi

r - 我不想保留用于创建 data.table 子集的列。我怎样才能做到这一点?

转载 作者:行者123 更新时间:2023-12-01 10:17:47 25 4
gpt4 key购买 nike

如果这是我的数据表:

DT = data.table(x=rep(c("a","b","c"),each=2), y=c(1,3), v=1:6)
setkey(DT, y)

DT
# x y v
# 1: a 1 1
# 2: b 1 3
# 3: c 1 5
# 4: a 3 2
# 5: b 3 4
# 6: c 3 6

我现在从这个数据表中创建子集;变量 y 包含在结果中。有办法去掉吗?

DT1 <- DT[ , .SD[ , paste(x, v, sep="", collapse="_")], by=y]
DT1
# y V1
# 1: 1 a1_b3_c5
# 2: 3 a2_b4_c6

我意识到我可以通过以下额外步骤来做到这一点:

DT1 <- DT1[,y:=NULL]

.. 但想知道在创建子集时是否可以选择删除 y?

最佳答案

使用 split.data.table 和 magrittr:

library(magrittr)
split(DT, by="y", keep.by=FALSE) %>%
sapply(. %$% paste(x, v, sep="", collapse="_"))

# 1 3
# "a1_b3_c5" "a2_b4_c6"
如果不需要名称(上面的 1 和 3),可以在 sapply 之后添加

unname

与@akrun 的答案比较,参见?split.data.table,其中解释了使用by= 而不是f= .如果 keep.by= 参数是 available in DT[...] ,可以更直接地解决 OP 的问题。

关于r - 我不想保留用于创建 data.table 子集的列。我怎样才能做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59504951/

25 4 0