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