r - data.table 中的 .N 带条件

标签 r data.table left-join

我正在尝试根据条件计算 data.table 的多个 .N

我有一个数据表

SD = data.table(x=c(1,1,1,1,2,2,2,2), y=c("a", "a", "b", "b","a", "a",
                 "b", "b"), z= c("x", "x", "y","y", "x","z","x","w"))

我想计算两件事:

  1. x 和 y 的每个组合的计数

我就是这样做的

SD[,.N, .(x,y)]

输出就是我想要的

   x y N
1: 1 a 2 
2: 1 b 2 
3: 2 a 2 
4: 2 b 2
  • x 和 y 的每个组合的计数,其中 z == "x"
  • 作为一个快速解决方案,我这样做了

    SD[z == "x", .N, .(x,y)]
    
    merge.data.table(SD[,.N, .(x,y)],
                     SD[z == "x", .N, .(x,y)], 
                     by = c('x','y'), all.x =TRUE)`
    

    有没有什么方法可以在一行代码中完成这两项操作而不需要连接? 它可以工作,但由于 data.table 太大,需要很长时间

    感谢任何帮助

    最佳答案

    这个怎么样:

    SD[, .(.N, count2 = sum(z == 'x')), .(x,y)]
    #    x y N count2
    # 1: 1 a 2      2
    # 2: 1 b 2      0
    # 3: 2 a 2      1
    # 4: 2 b 2      1
    

    除了按唯一的 x-y 组合计算行数之外,我们还计算每个 x-y 组合中 z == 'x' 的行数。

    关于r - data.table 中的 .N 带条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64332589/

    相关文章:

    r - 比较向量值

    r - 在 ggplot2 中组合图例

    r - 在 ggplot 上创建带有比例的条形图

    sql - Oracle 语法左连接三个或更多表

    r - 在 read.table() : incomplete final line found by readTableHeader

    r - 将日期列从年月日转换为仅年月

    r - data.table 滞后运算符抛出错误

    r - dplyr:访问当前组变量

    mysql - 对同一张表使用左连接还是有更好的方法?

    mysql - 具有连接和分页功能的 eclipselink