作者daybreakya (熊猫)
看板R_Language
标题[问题] 不同data.table(frame)范围筛选
时间Tue Jun 25 23:43:54 2019
[问题类型]:
程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
[软体熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
我有两个不同的data.table,想将第一个data.table内的资料(num、value),
透过Mark关联到第二个data.table,并设定范围来做筛选,最後显示出不符合的资料
目前有做一个简单的资料来测试,看起来是有跑出来想要的结果
但将此概念套用在另一个真正想做的地方上
(资料更复杂的,有小数点、DT1的资料更多列)
好像没有筛选乾净的样子,不知道在R中,两张表的资料筛选,可以这样做吗?
或是有建议什麽方法,来得到我想要的结果呢?
[程式范例]:
library(data.table)
library(dplyr)
DT1 <- data.table(ID=c("F","A","E","B","C","D","C"),
num=c(59,3,108,11,22,54,241),
value=c(90,47,189,38,42,86,280),
Mark=c("Mary","Tom","Abner","Norman","Joanne",
"Bonnie","Trista"))
DT2 <- data.table(Mark=c("Mary","Abner","Bonnie","Trista","Norman"),
numA=c(48,20,88,237,20),
numB=c(60,326,54,268,89),
valueA=c(78,34,78,270,59),
valueB=c(90,190,90,385,75))
output <- DT1 %>%
anti_join(merge(DT1, DT2, by = "Mark") %>%
filter(num > numA & num < numB &
value > valueA & value < valueB), by = "Mark" )
[环境叙述]:
R version 3.5.1 (2018-07-02)
[关键字]:
选择性,也许未来有用
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.37.138.65 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1561477436.A.EBB.html
1F:→ andrew43: 这个例子中你期待的结果应该是什麽? 06/26 00:24
2F:→ andrew43: 或是提供超乎预期的实例。 06/26 00:26
应该说,我有得到我想要的结果,想确认的是,两张data.table
如果是用我这方法来过滤资料,会不会有问题?(没有正确比对之类的情况)
filter(num > numA & num < numB & value > valueA & value < valueB)
※ 编辑: daybreakya (120.127.169.50 台湾), 06/26/2019 14:53:37
3F:推 andrew43: 可能小心Mark有没有一对多或多对多的情形 06/26 18:22