如何解决R-使用查找表对dplyr进行突变
您好,我有一个数据表(包含名称和值),一个引用表和一个限制表,我想在数据表中创建一个新列,将实际行的值与匹配名称的参考值和相应列的限制。以下是一些示例数据,可使其更清晰:
参考表
> refTable
name value1 value2
1 aa 1.2 0.4
2 bb 3.4 2.3
3 cc 2.1 1.1
限制表
> limits
value1 value2
1 2.1 1.8
数据表
> dataTable
name value1 value2
1 aa 1.0 1.4
2 aa 2.4 2.1
3 cc 2.6 1.8
4 bb 2.2 2.4
5 aa 3.4 3.0
6 cc 2.9 0.8
最后,我想在数据表中添加新列(如value1_pass
和value2_pass
),其计算方式如下:
value1_pass = ((matching name's value1 in reference table) - (value1 of data table)) < (limit of value1)
我正在使用dplyr和data.frames,并且我试图为此使用mutate,但是我不知道如何在mutate方程中使用参考值和极限值。正确的做法是什么? (理想情况下,我只想拥有/创建结果列,但如果这样做更容易,我真的不介意将具有匹配参考值的新列复制到数据表中)
解决方法
library(dplyr)
dataTable %>%
left_join(refTable,by = "name",suffix = c("",".ref")) %>%
mutate(value1_pass = ((value1.ref - value1) < limits$value1),value2_pass = ((value2.ref - value2) < limits$value2),value1.ref = NULL,value2.ref = NULL)
,
使用dplyr完成这项工作:
> dt %>% mutate(value1_limit = limitt$value1,value2_limit = limitt$value2) %>%
+ inner_join(reft,by = 'name') %>%
+ mutate(value1_pass = value1.y - value1.x < value1_limit,value2_pass = value2.y - value2.x < value2_limit) %>%
+ select(1,2,3,8,9) %>% rename(value1 = value1.x,value2= value2.x)
# A tibble: 6 x 5
name value1 value2 value1_pass value2_pass
<chr> <dbl> <dbl> <lgl> <lgl>
1 aa 1 1.4 TRUE TRUE
2 aa 2.4 2.1 TRUE TRUE
3 cc 2.6 1.8 TRUE TRUE
4 bb 2.2 2.4 TRUE TRUE
5 aa 3.4 3 TRUE TRUE
6 cc 2.9 0.8 TRUE TRUE
>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。