0

我有以下数据(表1):

**name | Product1_abc_value | Product2_abc_value**
  lmn  |                 12 |                 20 

这里产品名称是动态的,产品数量也是动态的。我有另一组数据,我想使用它来应用标志。示例(表 2);

**Product                 | Cutoff_Value**
Product1_abc_value_Cutoff | 15
Product2_abc_value_Cutoff | 17

使用上表,我想根据表 1(特定产品)上的条件得出一个标志。就像 product1 的截止值是 15 一样,则将每个名称的标志设置为“1”,否则设置为“0”。

我应该如何实现这一目标?

4

1 回答 1

0

您需要匹配 的列名tbl1和中的Producttbl2。获取tbl1长格式并"_Cutoff"Product列中删除并加入两个表。然后,如果Cutoff_Value大于 ,则可以分配 1 value

library(dplyr)

tbl1 %>%
  tidyr::pivot_longer(cols = -name, names_to = 'Product') %>%
  right_join(tbl2 %>%
               mutate(Product = sub('_Cutoff', '', Product)), by = 'Product') %>%
   mutate(flag = as.integer(Cutoff_Value > value))


# A tibble: 2 x 5
#  name  Product            value Cutoff_Value  flag
#  <chr> <chr>              <int>        <int> <int>
#1 lmn   Product1_abc_value    12           15     1
#2 lmn   Product2_abc_value    20           17     0

数据

tbl1 <- structure(list(name = "lmn", Product1_abc_value = 12L, 
Product2_abc_value = 20L), class = "data.frame", row.names = c(NA,-1L))

tbl2 <- structure(list(Product = c("Product1_abc_value_Cutoff", 
"Product2_abc_value_Cutoff"), Cutoff_Value = c(15L, 17L)), 
class = "data.frame", row.names = c(NA, -2L))
于 2020-06-08T08:22:20.380 回答