-6ren">
gpt4 book ai didi

r - 同时子集行和列

转载 作者:行者123 更新时间:2023-12-04 13:33:35 24 4
gpt4 key购买 nike

我对data.table的工作方式感到有些惊讶:

> library(data.table)
data.table 1.8.2 For help type: help("data.table")
> dt <- data.table(a=11:20, b=21:30, c=31:40, key="a")
> dt[list(12)]
a b c
1: 12 22 32
> dt[list(12), b]
a b
1: 12 22
> dt[list(12)][,b]
[1] 22

我想做的是获取与选择匹配的行中单个列(或表达式)的值。我看到我必须将键作为列表传递,因为原始数字将指示行号而不是键值。因此,上面的第一个对我来说很清楚。但是,为什么第二个和第三个子集表达式产生不同的结果,在我看来却很令人困惑。我想得到第三个结果,但希望能够以第二种方式编写它。

是否有充分的理由为什么同时为行和列子集data.table总是包含键值和计算结果?除了上述的双子集化以外,是否有一种语法上更短的方法来获得单个结果?

我正在R 2.15.1上使用data.table 1.8.2。如果您无法重现我的示例,则不妨将一个因素视为关键:
dt <- data.table(a=paste("a", 11:20, sep=""), b=21:30, c=31:40, key="a")
dt["a11", b]

最佳答案

关于这个问题:

Is there any good reason why subsetting a data.table for rows and columns at the same time will always include the key value as well as the computed result?



我相信(对我来说足够好)的原因仅仅是Matthew Dowle尚未加入该选项(可能是因为他已经将工作重点放在了更多有用的功能上,例如“:= with by”)。

my answer here之后的评论中,Matthew似乎表明它在他的TODO列表中,并指出“[这是添加 drop=TRUEdrop将要做的事情(具有速度优势)”。

在此之前,以下任何一项都可以完成工作:
dt[list(12)][,b]
# [1] 22
dt[list(12)][[2]]
# [1] 22
dt[dt[list(12), which=TRUE], b]
# [1] 22

关于r - 同时子集行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11795411/

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