假设我的数据框ARAP
包含名为CoCd
和VendorNo
的列。
我希望将其组合成另一个名为EMIU_EMIJ
的数据框,并将其组合为:
CoCd="EMIJ" & VendorNo = "100010" or
CoCd="EMIU" & VendorNo = "2000001" or
CoCd="EMIU" & VendorNo = "2000006".
我如何结合&和|选择满足两种组合的线?
即它需要将CoCd
和VendorNo
组合配对在一起。
我试过
EMIU_EMIJ<-subset(ARAP,CoCd=="EMIJ"&VendorNo=="100010"|
CoCd=="EMIU"&VendorNo=="2000001"|
CoCd=="EMIU"&VendorNo=="2000006")
我也尝试过括号
EMIU_EMIJ<-subset(ARAP, (CoCd=="EMIJ"&VendorNo=="100010")|(CoCd=="EMIU"&VendorNo=="2000001")|(CoCd=="EMIU"&VendorNo=="2000006"))
但这造成了一个错误:"Error: unexpected symbol in:"EMIU_EMIJ"
如何为上述3种组合中的1种进行子集化?
答案 0 :(得分:1)
使用merge
选项的简单all.y
即可。
例如,如果mydf是您的数据
set.seed(111)
mydf <- data.frame(id=rep(LETTERS, each=4)[1:100], replicate(3, sample(1001, 100)),Class=sample(c("Yes", "No"), 100, TRUE))
mydf$CoCd <- paste0("EMI",mydf$id)
mydf$VendorNo <- paste0(mydf$X1,mydf$X2)
mydf <- unique(mydf[,c("CoCd","VendorNo","Class","X3")])
看起来像这样
CoCd VendorNo Class X3
1 EMIA 594577 Yes 727
2 EMIA 727137 Yes 921
3 EMIA 371939 Yes 123
4 EMIA 514176 No 950
5 EMIB 377818 Yes 668
6 EMIB 41713 No 85
7 EMIB 11637 No 579
8 EMIB 530266 No 212
9 EMIC 430566 Yes 241
10 EMIC 93958 No 533
11 EMIC 551197 Yes 176
12 EMIC 585686 No 565
13 EMID 67827 Yes 154
14 EMID 47894 No 469
15 EMID 155952 No 718
16 EMID 441649 No 835
17 EMIE 169541 Yes 945
18 EMIE 952871 Yes 452
19 EMIE 306441 No 358
20 EMIE 604730 No 920
21 EMIF 423407 No 868
22 EMIF 280668 Yes 658
23 EMIF 335907 Yes 830
24 EMIF 379620 Yes 841
25 EMIG 946644 No 471
你想要组合
combination_to_select<-data.frame(CoCd=c("EMIA","EMID","EMIF"),VendorNo=c('594577','47894','423407'),stringsAsFactors=FALSE)
combination_to_select
CoCd VendorNo
1 EMIA 594577
2 EMID 47894
3 EMIF 423407
以下代码为您提供了子集
subset <- merge(mydf,combination_to_select,by=c("CoCd","VendorNo"),all.y=TRUE)
CoCd VendorNo Class X3
1 EMIA 594577 Yes 727
2 EMID 47894 No 469
3 EMIF 423407 No 868