这应该很容易解决,但是我被卡住了。
我有一个data.table
,我需要对其进行复杂的过滤,如图所示。从本质上讲,它类似于excel中的索引功能,但是我需要以尽可能小的内存占用量来做到这一点。
我正在构建一个二维查询功能。将v1视为一个类别-只能是“一个”,“两个”或“三个”。将v2视为一系列数值。我首先指定v1。这将始终是“ ==”完全相等。然后,我想分配6
,即我输入的exampledt[v1=="one" & v2 >= 6, v3 ]
的值以获取相应的v3值。问题是6
至少匹配两行。这是这里的问题,我想利用表索引来避免创建所有if(v2[i]>=
排列。我需要将6
分配给一个范围为(inf-16], (16-6],(6,-inf)
如果我输入“ 1”和6,我希望得到i = 1,j = 2的值。
如果我输入“ 1”和5,我希望得到i = 1,j = 3的值。
如果我输入“ 2”和17,我希望得到i = 2,j = 2的值。
我宁愿避免5.999
的入侵,它也需要处理边界情况。我将如何使用不平等?我可以利用data.table索引吗?
exampledt <- setDT(data.frame(
c("one" , "one", "one",
"two" , "two","two",
"three" , "three", "three" ),
(c(16,6, 5.9999 ,
NA,6, 5.9999 ,
NA,22,21.9999)
)
,letters[1:9]
))
colnames(exampledt)<-c("v1","v2","v3")
#I tried this but the edge cases need additional logic which I need to avoid
exampledt[v1=="one" & v2 >= 6, v3 ]