我有一个如下所示的数据框(可能不会这样排序):
Group Value
A 1
A 5
A 6
A 11
B 3
B 4
B 5
B 10
现在我想要一个新列来计算每个组中有多少行的值落在每行值的固定范围内(假设对于这个例子,它必须比当前值小 2行的值和实际值,包括在内)。所以结果会是
Group Value New Count
A 1 1 (because there is only 1 row in Group A between -1 and 1, this row)
A 5 1 (because there is only 1 row in Group A between 3 and 5, this row)
A 6 2 (because there are 2 rows in Group A between 4 and 6)..and so on
A 11 1
B 3 1
B 4 2
B 5 3
B 10 1
我已经看到了一些关于在一个组内运行总计数器等的答案,但是我在搜索 SO 时没有遇到这种情况......
最佳答案
另一种方法是使用非相等连接并根据连接条件分组:
library(data.table)
setDT(DF)[, New.Count := .SD[.(Group = Group, V1 = Value, V2 = Value - delta),
on = .(Group, Value <= V1, Value >= V2), .N, by = .EACHI]$N][]
Group Value New.Count 1: A 1 1 2: A 5 1 3: A 6 2 4: A 11 1 5: B 3 1 6: B 4 2 7: B 5 3 8: B 10 1
数据
library(data.table)
DF <- fread(
" Group Value
A 1
A 5
A 6
A 11
B 3
B 4
B 5
B 10"
)
关于R - 根据当前行和其他行中的值向数据框添加计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47195329/