R - 如何通过行和列上的键值访问数据表数据

标签 r data.table

我有一个数据表:

> COUNT_ID_CATEGORY
                id 706 799 1703 1726 2119 2202 3203 3504 3509 4401 4517 5122 5558 5616 5619 5824 6202 7205 9115 9909
     1:      86246   9   0   15    4   28    0   15   63   39    5    7   25   27   43   12   64    1   16    0   96
     2:      86252   3   0   17    6   21    0    6   62   24    6    7   12   25   32    6   49    1   26    0  103
     3:   12262064   3   0    1    1   12    0    0    2    1    0    0    0    2    4    0    4    0    0    0   12
     4:   12277270   2   0    0    0    1    0    3    0    3    0    0    0    0   24    0    6    2    5    0   60
     5:   12332190   2   0    2    0    4    0    1    2    0    0    0    1    0    3    0    1    3    2    0   46
    ---                                                                                                             
310661: 4837642552   0   0    0    0    0    0    1    0    0    0    0    0    0    0    0    1    0    0    1    0
310662: 4843417324   0   0    0    0    0    0    0    0    0    0    0    0    0    0    1    2    0    0    0    0
310663: 4847628950   2   0    1    1   16    0    0    2    3    0    0    2    9    5    0    3    3    2    3   14
310664: 4847787712   0   0    0    0    1    0    0    0    1    0    0    0    0    0    0    0    0    0    0    0
310665: 4853598737   0   0    0    0    0    0    0    0    0    0    0    0    1    0    0    1    0    0    0    0
> class(COUNT_ID_CATEGORY)
[1] "data.table" "data.frame"
>

我希望尽快读取数据,如下:

COUNT_ID_CATEGORY for (id == 86246) & (category == 706)

它应该返回值 9(表的左上角)。 (例如)

我可以通过以下方式获取行:

COUNT_ID_CATEGORY[id==86246,]

但是我如何获得该列呢?

> dput(head(COUNT_ID_CATEGORY))
structure(list(id = c(86246, 86252, 12262064, 12277270, 12332190, 
12524696), `706` = c(9L, 3L, 3L, 2L, 2L, 0L), `799` = c(0L, 0L, 
0L, 0L, 0L, 0L), `1703` = c(15L, 17L, 1L, 0L, 2L, 0L), `1726` = c(4L, 
6L, 1L, 0L, 0L, 0L), `2119` = c(28L, 21L, 12L, 1L, 4L, 0L), `2202` = c(0L, 
0L, 0L, 0L, 0L, 0L), `3203` = c(15L, 6L, 0L, 3L, 1L, 0L), `3504` = c(63L, 
62L, 2L, 0L, 2L, 11L), `3509` = c(39L, 24L, 1L, 3L, 0L, 3L), 
    `4401` = c(5L, 6L, 0L, 0L, 0L, 1L), `4517` = c(7L, 7L, 0L, 
    0L, 0L, 1L), `5122` = c(25L, 12L, 0L, 0L, 1L, 0L), `5558` = c(27L, 
    25L, 2L, 0L, 0L, 1L), `5616` = c(43L, 32L, 4L, 24L, 3L, 18L
    ), `5619` = c(12L, 6L, 0L, 0L, 0L, 0L), `5824` = c(64L, 49L, 
    4L, 6L, 1L, 10L), `6202` = c(1L, 1L, 0L, 2L, 3L, 6L), `7205` = c(16L, 
    26L, 0L, 5L, 2L, 4L), `9115` = c(0L, 0L, 0L, 0L, 0L, 0L), 
    `9909` = c(96L, 103L, 12L, 60L, 46L, 1L)), .Names = c("id", 
"706", "799", "1703", "1726", "2119", "2202", "3203", "3504", 
"3509", "4401", "4517", "5122", "5558", "5616", "5619", "5824", 
"6202", "7205", "9115", "9909"), sorted = "id", class = c("data.table", 
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x043a24a0>)

最佳答案

第一setkey使用data.table的二分搜索/子集功能进行快速查找:

setkey(COUNT_ID_CATEGORY, id)

然后你可以这样做:

COUNT_ID_CATEGORY[J(86246)][, '706']

第一部分COUNT_ID_CATEGORY[J(86246)]使用二分搜索执行快速子集。您可以阅读有关 J(.) 及其用途的更多信息 here .

下一部分[, '706', with=FALSE]采用子集结果,它是一个data.table并仅选择列706 .

为了完整起见,this post显示了从 data.table 中选择/子集列的更多方法。

关于R - 如何通过行和列上的键值访问数据表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23474094/

相关文章:

r - 如何在 Databricks 中使用 R Notebook 的相对路径?

r - 当我在图中使用简化时绘制图形的问题

r - 如何使 Shiny 的 selectInput 下拉列表在多个数据帧之间进行选择

r - 将 data.table 拆分为大致相等的部分

r - 合并两个具有非唯一键的数据框

r - 添加列以从 R 中的数据框中聚合

r - 生成后缀数递增的重复字符串的向量

r - r中data.table中的部分滚动总和

R数据表唯一记录计数基于来自2列的给定值列表的所有组合

r - 在 R 中执行 := by group in a data. 表时如何更改目标列的类型?