gpt4 book ai didi

R:选择 data.table 中的列范围

转载 作者:行者123 更新时间:2023-12-04 23:55:06 25 4
gpt4 key购买 nike

我正在尝试掌握 data.table 的文档,但我想寻求反馈,我在以下推理中出错的地方。

(1) 我想从 data.table 中选择一系列列来创建一个新的 data.table。

(2)另外,我想只取每组的第一个值。关于第一个问题我想答案是here ,但是关于列号。但我想使用列名,我认为这是 data.table 的主要优势(和卖点)之一。

这是一个示例数据集。

DT <- data.table(ID=c(101,101,101,102,103,104,104),
"year.1" = c(1,5,3,2,3,4,8),
"year.2" = c(4,5,6,NA,1,2,3),
"year.3" = c(1,2,3,7,9,8,0),
"year.4" = c(4,5,NA,1,2,6,9))
setkey(DT,ID)

实际上,我有更多的专栏,而不仅仅是“年份”。
# ALL OF THESE DONT WORK AND END IN ERRORS
# To extract a range of columns I have tried this:
dt.sub <- DT[,list(year.1:year.3,ID)]
dt.sub <- DT[,c("year.1":"year.3",ID), with=FALSE] # I know shouldn't work since
# "with=FALSE" is only intended in combination with := according to the documentation
dt.sub <- DT[,lapply(SD),.SDcols= for (i in 1:3) paste0("year.",i) ]

对于第二个问题:如果我希望 dt.sub 只包含每个组的第一个观察值,我希望我可以使用“mult”参数。然而,这也适用于
与我预期的方式不同。仅使用一列上的示例:
dt.sub1 <- DT[,year.1, by=ID,mult="first",]

这不提供错误,而且不只是给出组的第一行。我知道一个解决方法是:
dt.sub1 <- unique(DT[,year.1, by=ID])

确实提供了预期的输出,但我觉得我在 mult 中遗漏了一些重要的东西选项。

最佳答案

# (1)
DT[, c(paste0('year.', 1:3), 'ID'), with = F]

# (2)
DT[, year.1[1], by = ID]
mult在合并/加入两个 data.tables 时使用,并表示存在多个匹配项时要执行的操作。因此,正如@Arun 指出的那样,使用 mult 的方法你的第二个问题是(假设你已经被 ID 键入了):
DT[J(unique(ID)), list(ID, year.1), mult = 'first']

关于R:选择 data.table 中的列范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com