r - 同时子集行和列

标签 r data.table

我对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/

相关文章:

r - 通过 XLConnect 从 R 更改 MS Excel 文件中的单元格格式

r - 如何更改 Shinydashboard 中侧边栏的字体大小

r - 动态构建查找多列的调用

r - 使用 dcast.data.table 仅针对列值的子集从长转换为宽

r - dplyr mutate 和 summary 在数据表中的等价物是什么?

r - 在 Linux Ubuntu 16.10 上安装 Pre-Release R 3.3.2

r - 根据多个标准绘制整体百分比

r - “离散化”连续变量 - 但不是 'factorize'

r - R 中数据表中状态变量的跟踪时间

r - 将某一行的值与 data.table 中的所有先前行进行比较