我在R中的脚本有问题。我有一个数据框(CSV),每个文件中都有几百行。我想比较文件(较旧的文件)。在较旧的版本中,有某些值,例如“国家/地区”,“客户ID”,“类别”和“代表ID”。每个客户都有一个客户。有时客户会改变。更改在每个文件中。因此,最旧的文件(数据帧)是基本数据库,在后续文件中,只有更改。因此,让我们说:
PL|Pharmacy|WPLF1111123233|F111
其中WPLF1111123233是客户ID,而F112是代表ID
在下一个数据帧中
PL|Pharmacy|WPLF1111123233|F333
与上述相同,但同一代表已从F111更改为F333
所以我尝试使用这样的公式。要在第一个数据帧和第二个数据帧中检查客户端的ID,如果在第二个数据帧中存在ClientID,则表示ClientID已更改,因此在第一个文件中我也应对其进行更改。
dataset$RepID <- ifelse ((dataset$CustomerID %in% dataset2$CustomerID), dataset2$RepID, dataset$RepID)
其中数据集只是第一个数据框,而数据集2是具有更改的数据框。 “ RepID”是具有代表ID的列。我使用Ifelse是因为正常的If不适用于矢量。这件事是错误的,因为它没有任何顺序,而且我也不知道该如何省略。我一直在寻找答案,但找不到任何答案。谢谢您的帮助。
一般来说,我喜欢350个文件,但是要做到这一点,它将成为一个简单的循环,所以这不是问题。
编辑: 要检查的旧数据
D|PL|Terytorium_nowe|WPLF00003224|25|F123|1
D|PL|Terytorium_nowe|WPLF02818905|26|F120|1
I|PL|Terytorium_nowe|WPLF02615545|20|F110|1
I|PL|Terytorium_nowe|WPLF02615553|36|F112|1
I|PL|Terytorium_nowe|WPLF02615557|01|F106|1
I|PL|Terytorium_nowe|WPLF02615561|36|F112|1
I|PL|Terytorium_nowe|WPLF02615564|31|F101|1
I|PL|Terytorium_nowe|WPLF00007731|34|F132|1
更改:
D|PL|Terytorium_nowe|WPLF07253186|17|Grandpa|1
D|PL|Terytorium_nowe|WPLF00003224|25|Pontiac|1
D|PL|Terytorium_nowe|WPLF02818905|26|Catalina|1
I|PL|Terytorium_nowe|WPLF02615545|20|Chicago|1
I|PL|Terytorium_nowe|WPLF02615557|01|Foxtrot|1
I|PL|Terytorium_nowe|WPLF02615553|36|Tango|1
I|PL|Terytorium_nowe|WPLF02615561|36|Hollywood|1
I|PL|Terytorium_nowe|WPLF02615564|31|Zulu|1
因此,应该更新DataToCheck中的列表->名称应从F(numbers)
更改为Nato Alphabet
,并且不应将DataToCheck中ID为WPLF00007731
和ID F132
的行被触摸或更改,并且将Grandpa
中的更改行添加到第一个DataToCheck
答案 0 :(得分:0)
具有基本循环方式的解决方案。 (根据您的数据框更改列名称。)
OLD_DATA_TO_CHECK
Col1 Country Category Customer_Id Col5 Col6 Col7
1 D PL Terytorium_nowe WPLF00003224 25 F123 1
2 D PL Terytorium_nowe WPLF02818905 26 F120 1
3 I PL Terytorium_nowe WPLF02615545 20 F110 1
4 I PL Terytorium_nowe WPLF02615553 36 F112 1
5 I PL Terytorium_nowe WPLF02615557 1 F106 1
6 I PL Terytorium_nowe WPLF02615561 36 F112 1
7 I PL Terytorium_nowe WPLF02615564 31 F101 1
8 I PL Terytorium_nowe WPLF00007731 34 F132 1
CHANGES
Col1 Country Category Customer_Id Col5 Col6 Col7
1 D PL Terytorium_nowe WPLF07253186 17 Grandpa 1
2 D PL Terytorium_nowe WPLF00003224 25 Pontiac 1
3 D PL Terytorium_nowe WPLF02818905 26 Catalina 1
4 I PL Terytorium_nowe WPLF02615545 20 Chicago 1
5 I PL Terytorium_nowe WPLF02615557 1 Foxtrot 1
6 I PL Terytorium_nowe WPLF02615553 36 Tango 1
7 I PL Terytorium_nowe WPLF02615561 36 Hollywood 1
8 I PL Terytorium_nowe WPLF02615564 31 Zulu 1
在这里,我假设OLD_DATA_TO_CHECK
是您的旧数据,将根据需求进行修改。
for(i in 1:length(OLD_DATA_TO_CHECK$Customer_Id)){
for(j in 1:length(CHANGES$Customer_Id)){
if(OLD_DATA_TO_CHECK$Customer_Id[i] != 'WPLF00007731' & OLD_DATA_TO_CHECK$Col6[i] != "F132"){ # Checking for the row which shold not modify
if(OLD_DATA_TO_CHECK$Customer_Id[i] == CHANGES$Customer_Id[j]){
OLD_DATA_TO_CHECK$Col6[i] <- CHANGES$Col6[j]
if(CHANGES$Col6[i] == 'Grandpa'){
OLD_DATA_TO_CHECK <- rbind(CHANGES[i,], OLD_DATA_TO_CHECK) # binding the identified row from CHANGES to top row of OLD_DATA_TO_CHECK
}
}
}
}
}
OLD_DATA_TO_CHECK #after modifications
Col1 Country Category Customer_Id Col5 Col6 Col7
1 D PL Terytorium_nowe WPLF07253186 17 Grandpa 1
2 D PL Terytorium_nowe WPLF00003224 25 Pontiac 1
3 D PL Terytorium_nowe WPLF02818905 26 Catalina 1
4 I PL Terytorium_nowe WPLF02615545 20 Chicago 1
5 I PL Terytorium_nowe WPLF02615553 36 Tango 1
6 I PL Terytorium_nowe WPLF02615557 1 Foxtrot 1
7 I PL Terytorium_nowe WPLF02615561 36 Hollywood 1
8 I PL Terytorium_nowe WPLF02615564 31 Zulu 1
9 I PL Terytorium_nowe WPLF00007731 34 F132 1