r - 用另一个具有不同列名的 data.table 过滤 data.table

标签 r filter data.table subset

我有这个数据集:

library(data.table)    
dt <- data.table(
  record=c(1:20),
  area=rep(LETTERS[1:4], c(4, 6, 3, 7)), 
  score=c(1,1:3,2:3,1,1,1,2,2,1,2,1,1,1,1,1:3),
  cluster=c("X", "Y", "Z")[c(1,1:3,3,2,1,1:3,1,1:3,3,3,3,1:3)]
)

并且我使用了这篇文章中的解决方案来创建此摘要:

dt_summary = 
  dt[ , .N, keyby = .(area, score, cluster)
      ][ , {
        idx = frank(-N, ties.method = 'min') == 1
        NN = sum(N)
        .(
          cluster_mode = cluster[idx],
          cluster_pct = 100*N[idx]/NN,
          cluster_freq = N[idx],
          record_freq = NN
        )
      }, by = .(area, score)]
dt_score_1 <- dt_summary[score == 1]
setnames(dt_score_1, "area", "zone")

我想使用 dt_score_1 的结果根据 area/zone 和 cluster/cluster_mode 过滤 dt。因此,在新的 data.table 中,区域 A 从 dt 中获取的唯一行应该属于集群 X,对于区域 D,它们应该属于集群 Z,等等。

最佳答案

如果我对问题的理解正确,这是 dtdt_score_1 的合并,条件是 area = zone, cluster = cluster_mode.

dt[dt_score_1, on = .(area = zone, cluster = cluster_mode)]

#     record area score cluster i.score cluster_pct cluster_freq record_freq
#  1:      1    A     1       X       1   100.00000            2           2
#  2:      2    A     1       X       1   100.00000            2           2
#  3:      7    B     1       X       1    66.66667            2           3
#  4:      8    B     1       X       1    66.66667            2           3
#  5:     11    C     2       X       1   100.00000            1           1
#  6:     12    C     1       X       1   100.00000            1           1
#  7:     14    D     1       Z       1    80.00000            4           5
#  8:     15    D     1       Z       1    80.00000            4           5
#  9:     16    D     1       Z       1    80.00000            4           5
# 10:     17    D     1       Z       1    80.00000            4           5
# 11:     20    D     3       Z       1    80.00000            4           5

有关 join-as-filter 的更详细说明,请参阅下面@Frank 发布的链接

Perform a semi-join with data.table

关于r - 用另一个具有不同列名的 data.table 过滤 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52818659/

相关文章:

json - httr 库中的 POST 方法与 R 中的特定 header

r - Knitr 生成非常大的 html 文件

javascript - 如何过滤对象数组并仅返回一个结果而不带数组括号

R:查找在每个观察的时间范围内发生的变量的每个唯一值的计数

r - 将每周时间序列扩展为每日

r - 将新变量添加到 data.frames 列表的每个元素

java - 查找与文件夹中的模式匹配的最新文件

javascript - jQuery 过滤两个参数

r - 当measure.vars包含不在data.table中的变量时,melt.data.table可能会崩溃

r - 根据 data.table 中列值的优先级选择组中的行