gpt4 book ai didi

r - 不等于使用 data.table 的关系计数

转载 作者:行者123 更新时间:2023-12-05 06:29:54 24 4
gpt4 key购买 nike

我希望了解如何使用 data.table 计算给定的特定分类变量的所有级别的计数,这些级别与记录的值不匹配。

取下面的data.table。

df <- data.table(var1 = c('dog','cat','dog','cat','dog','dog','dog'),
var2 = c(1,5,90,95,91,110,8),
var3 = c('lamp','lamp','lamp','table','table','table','table'))

我想计算一个范围内的值的数量,并且 var1 不共享相同的值。

这与 Count of values within specified range of value in each row using data.table 有关.引用@Jaap 的回答,以下代码允许生成一个范围内的计数。

df[, var2withinrange := df[.(var2min = var2 - 5, var2plus = var2 + 5)
, on = .(var2 >= var2min, var2 <= var2plus)
, .N
, by = .EACHI][, N]][]

在尝试扩展这个答案时,我成功地要求 var1 与以下内容完全匹配:

df[, var2withinrange := df[.(var2min = var2 - 5, var2plus = var2 + 5, var1 = var1)
, on = .(var2 >= var2min, var2 <= var2plus, var1 = var1)
, .N
, by = .EACHI][, N]][]

下面的代码是我尝试在 var1 持有的值不等于给定行中的 var1 值时进行计数,但此代码失败了。

df[, var2withinrange := df[.(var2min = var2 - 5, var2plus = var2 + 5, var1 = var1)
, on = .(var2 >= var2min, var2 <= var2plus, var1 != var1)
, .N
, by = .EACHI][, N]][]

如何添加“不等于”类型的运算符? data.table 答案是更可取的,但当然 dplyr 中的解决方案或任何替代方案将不胜感激!

最佳答案

在这种特殊情况下,您可以执行以下操作:

df[.(var2min = var2 - 5, var2plus = var2 + 5, v1=var1)
, on = .(var2 >= var2min, var2 <= var2plus)
, sum(v1 != x.var1)
, by = .EACHI]

输出:

   var2 var2 V1
1: -4 6 1
2: 0 10 2
3: 85 95 1
4: 90 100 2
5: 86 96 1
6: 105 115 0
7: 3 13 1

一般来说,我觉得你可以做一个反加入。

关于r - 不等于使用 data.table 的关系计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52973645/

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