r - R在data.table中查找区间
问题描述
我想按组添加一个带有间隔或断点的新列。举个例子:
这是我的数据表:
x <- data.table(a = c(1:8,1:8), b = c(rep("A",8),rep("B",8)))
我已经有断点或行索引:
pos <- data.table(b = c("A","A","B","B"), bp = c(3,5,2,4))
在这里我可以找到组“A”的间隔:
findInterval(1:nrow(x[b=="A"]), pos[b=="A"]$bp)
我怎样才能为每个组做到这一点。在这种情况下“A”和“B”?
解决方案
一个选项是split
通过'b'列对数据集,Map
用于循环对应list
的s,并应用findInterval
Map(function(u, v) findInterval(seq_len(nrow(u)), v$bp),
split(x, x$b), split(pos, pos$b))
#$A
#[1] 0 0 1 1 2 2 2 2
#$B
#[1] 0 1 1 2 2 2 2 2
或另一种选择是从“x”中按“b”分组,然后findInterval
通过使用基于创建的逻辑条件进行过滤,将“bp”从“pos”子集化来使用 .BY
x[, findInterval(seq_len(.N), pos$bp[pos$b==.BY]), b]
# b V1
# 1: A 0
# 2: A 0
# 3: A 1
# 4: A 1
# 5: A 2
# 6: A 2
# 7: A 2
# 8: A 2
# 9: B 0
#10: B 1
#11: B 1
#12: B 2
#13: B 2
#14: B 2
#15: B 2
#16: B 2
推荐阅读
- python-3.x - 打印 'n' int 时避免重复
- php - 仅从一位电子邮件发件人发送邮件
- reactjs - 如何获取 ref 数组
- spring - 在不同类的构造函数中引用 bean
- javascript - 如何在字符串中同时返回小写和大写元音?
- javascript - 用于将具有相同键和值的 React 道具传递给组件的语法糖
- angular - 量角器测试中的异步/等待逻辑未检测到页面元素
- javascript - 如何在 Mongodb 中设置数据库身份验证 - SSH 管道是否更适合 MongoDB?
- reactjs - React Native 应用程序不会更新状态,直到我离开应用程序然后返回它
- html - 固定菜单的不同 z-index 问题:如何分层不同父母的子 div