【问题标题】:R - dplyr mutate using lookup tablesR - dplyr 使用查找表进行变异
【发布时间】:2020-10-22 07:40:34
【问题描述】:

您好,我有一个数据表(包含名称和值)、一个引用表和一个限制表,我想在数据表中创建一个新列,将实际行的值与匹配名称的参考值和相应列的限制。以下是一些示例数据,以使其更清晰:

参考表

> 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_passvalue2_pass),其计算方式如下: value1_pass = ((matching name's value1 in reference table) - (value1 of data table)) < (limit of value1)

我正在使用 dplyr 和 data.frames,我试图为此使用 mutate,但我不知道如何在 mutate 方程中使用参考值和限制值。这样做的正确方法是什么? (理想情况下,我只想拥有/创建结果列,但如果这样更容易,我不介意将新列复制到具有匹配参考值的数据表中)

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:
    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)
    

    【讨论】:

      【解决方案2】:

      这个工作,使用 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       
      > 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-30
        • 2018-08-24
        • 2014-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多