将数据从一列移到另一列而不覆盖所有数据R

时间:2018-06-25 14:54:26

标签: r replace

我有一个很大的数据框,其中包含地址信息(CUST_ADDRESS_1和CUST_ADDRESS_2)。

CUST_ADDRESS_1应该仅包含街道信息,例如123 Anywhere Drive,而CUST_ADDRESS_2应该仅包含套件信息,例如Suite 23。

我要在Suite信息位于CUST_ADDRESS_1中找到所有实例,并将其放在CUST_ADDRESS_2中。

如果套件信息替换了CUST_ADDRESS_2中的当前数据,我可以,但是我只希望满足条件的数据被替换。

例如:

之前

CUST_ADDRESS_1                     CUST_ADDRESS_2
986 Eastern Drive                  Suite 180
763 Sunset Drive, Suite 2          Attn: Mark Matthews
543 Roanoke Lane
4201 Practice Road, Suite 18

之后

CUST_ADDRESS_1                     CUST_ADDRESS_2
986 Eastern Drive                  Suite 180
763 Sunset Drive                   Suite 2
543 Roanoke Lane
4201 Practice Road,                Suite 18

如果尝试以下操作,但是如果在CUST_ADDRESS_1中找不到Suite信息,则会删除CUST_ADDRESS_2中的数据。

RosterFinal$CUST_ADDRESS_2 <- if_else(grepl("SUITE",RosterFinal$CUST_ADDRESS_1),substr(RosterFinal$CUST_ADDRESS_1,(regexpr("SUITE", RosterFinal$CUST_ADDRESS_1)-1),nchar(RosterFinal$CUST_ADDRESS_1)),if_else(grepl(" STE",RosterFinal$CUST_ADDRESS_1),substr(RosterFinal$CUST_ADDRESS_1,(regexpr(" STE", RosterFinal$CUST_ADDRESS_1)-1),nchar(RosterFinal$CUST_ADDRESS_1)),if_else(grepl(" #",RosterFinal$CUST_ADDRESS_1),substr(RosterFinal$CUST_ADDRESS_1,(regexpr(" #", RosterFinal$CUST_ADDRESS_1)-1),nchar(RosterFinal$CUST_ADDRESS_1)),"")))

2 个答案:

答案 0 :(得分:0)

urltools

答案 1 :(得分:0)

这听起来像是标准的R问题。下面的代码绝对不是最优的,但是它应该使您对如何处理此类问题有所了解。

尝试以下

RosterFinal[which(grep(", Suite ",RosterFinal$CUST_ADDRESS_1)==1),'CUST_ADDRESS_2'] <- "Suite "+strsplit(RosterFinal$CUST_ADDRESS_1,"Suite ")[[1]][2]
RosterFinal$CUST_ADDRESS_1 <- strsplit(RosterFinal$CUST_ADDRESS_1,", Suite")[[1]][1]