基于R中的字符串交集创建数值变量

基于R中的字符串交集创建数值变量,r,string,R,String,我正试图根据字符串与R的dplyr包的交集创建一个数值变量。 我有一个列列表,其中包含数千名在汽车经销商处购买的个人的代码。这些代码可以表示购买汽车、汽车内部零件或汽车外部物品。我想用2表示购车代码,用1表示车内项目,用0表示车外项目。如果客户购买了汽车,我希望列LargestPurchase=2;如果客户没有买车,而是买了一个内饰组件,我希望列LargestPurchase=1;如果客户没有购买汽车或内饰部件,我希望列LargestPurchase=0 购车代码位于带有列CarCodes的单独

我正试图根据字符串与R的dplyr包的交集创建一个数值变量。
我有一个列列表,其中包含数千名在汽车经销商处购买的个人的代码。这些代码可以表示购买汽车、汽车内部零件或汽车外部物品。我想用2表示购车代码,用1表示车内项目,用0表示车外项目。如果客户购买了汽车,我希望列LargestPurchase=2;如果客户没有买车,而是买了一个内饰组件,我希望列LargestPurchase=1;如果客户没有购买汽车或内饰部件,我希望列LargestPurchase=0

购车代码位于带有列CarCodes的单独数据框中,而汽车内部部件代码位于带有列InteriorCodes的单独数据框中。每个都包含数千个代码

客户的数据如下所示(称为客户):

例如:

df1$CarCodes = c('STW387', 'W9333')
df2$InteriorCodes = c('K987', 'AZ326')

Customer1     PurchaseCode1    PurchaseCode2    PurchaseCode3   LargestPurchase 
001           STW387           K987             W9333           2
002           AZ326            CP993            EN499           1
003           BKY98            A0091            C2001           0
我尝试将以下ifelse函数用于mutate,但它似乎不适用于字符串:

      customers <- customers %>% mutate(LargestPurchase = 
    (ifelse(intersect(customers$PurchaseCode1, df1$CarCodes) == TRUE | 
intersect(customers$PurchaseCode2, df1$CarCodes) | 
intersect(customers$PurchaseCode3, df1$CarCodes), 2, ifelse( 
intersect(customers$PurchaseCode1, df2$InteriorCodes) == TRUE | 
intersect(customers$PurchaseCode2, df2$InteriorCodes) == TRUE |
intersect(customers$PurchaseCode3, df3$InteriorCodes) == TRUE, 1, 0)))
客户百分比变化(最大购买量=
(ifelse(intersect(客户$PurchaseCode1,df1$CarCodes)==TRUE |
intersect(客户$PurchaseCode2,df1$CarCodes)|
intersect(客户$PurchaseCode3,df1$CarCodes),2,ifelse(
intersect(客户$PurchaseCode1,df2$内部代码)=真
intersect(客户$PurchaseCode2,df2$InteriorCodes)=真|
intersect(客户$PurchaseCode3,df3$InteriorCodes)=真,1,0)))

任何洞察都很好。

确定是否包含
CarCodes
InteriorCodes
,然后使用最大值

c2 <- apply(df3[,-1], 1, function(x) ifelse(any(x %in% df2$InteriorCodes), 1, 0))
c1 <- apply(df3[,-1], 1, function(x) ifelse(any(x %in% df1$CarCodes), 2, 0))
df3$LargestPurchase <- pmax(c1, c2)

  Customer1 PurchaseCode1 PurchaseCode2 PurchaseCode3 LargestPurchase
1         1        STW387          K987         W9333               2
2         2         AZ326         CP993         EN499               1
3         3         BKY98         A0091         C2001               0

c2这是一个
dplyr
版本

CarCodes = c('STW387', 'W9333')
InteriorCodes = c('K987', 'AZ326')

data.frame(customer = c(001, 002, 003),
           code1 = c('STW387', 'AZ326', 'BKY98'),
           code2 = c('K987', 'CP993', 'A0091'),
           code3 = c('W9333', 'EN499', 'C2001')) %>% 
  gather(variable, value, -customer) %>% 
  mutate(purchase = case_when(value %in% CarCodes ~ 2,
                              value %in% InteriorCodes ~ 1,
                              TRUE ~ 0)) %>% 
  group_by(customer) %>% 
  summarise(largest_purchase = max(purchase))
CarCodes = c('STW387', 'W9333')
InteriorCodes = c('K987', 'AZ326')

data.frame(customer = c(001, 002, 003),
           code1 = c('STW387', 'AZ326', 'BKY98'),
           code2 = c('K987', 'CP993', 'A0091'),
           code3 = c('W9333', 'EN499', 'C2001')) %>% 
  gather(variable, value, -customer) %>% 
  mutate(purchase = case_when(value %in% CarCodes ~ 2,
                              value %in% InteriorCodes ~ 1,
                              TRUE ~ 0)) %>% 
  group_by(customer) %>% 
  summarise(largest_purchase = max(purchase))