Irregular gsub in R

SCW

I can't get my head around the following odd thing: I have a data.frame that I need to tidy up, and in this step I want to delete all entries that start with [ANONYMOUS] or a year in (). Consider this example, a subset with two entries to illustrate my problem.

    > print(allstacked2) #mysample- subset 
                                                              values ind
711                                [ANONYMOUS], 2010, COMMUNICATION.  V1
1588                        [ANONYMOUS], 2008, END UNLAWFUL ATTACKS.  V2
1297 (1986) ACTIVE MEASURES, , U.S. DEPARTMENT OF STATE, AUGUST 1986  V1
3994                        (1900) NEW YORK TIMES, P. 17. , 22 APRIL  V3

> pat <- "(?:^)\\(.*"
> repl <- NA
> allstacked2$V3 <- gsub(pat, repl, allstacked2$values, perl=TRUE)
> 
> pat <- "(^)\\[ANONYMOUS]"
> repl <- NA
> allstacked2$V3 <- gsub(pat, repl, allstacked2$V3, perl=TRUE)
> 
> pat <- "[\\s]+"
> repl <- " "
> allstacked2$V3 <- gsub(pat, repl, allstacked2$V3, perl=TRUE)
> 
> allstacked2[is.na(allstacked2)] = 'notavailable'
> allstacked2$V4 <- ifelse(allstacked2$V3==allstacked2$values,1,0) #to compare what has changed 
> print(allstacked2)
                                                              values ind                                        V3 V4
711                                [ANONYMOUS], 2010, COMMUNICATION.  V1                              notavailable  0
1588                        [ANONYMOUS], 2008, END UNLAWFUL ATTACKS.  V2  [ANONYMOUS], 2008, END UNLAWFUL ATTACKS.  1
1297 (1986) ACTIVE MEASURES, , U.S. DEPARTMENT OF STATE, AUGUST 1986  V1                              notavailable  0
3994                        (1900) NEW YORK TIMES, P. 17. , 22 APRIL  V3  (1900) NEW YORK TIMES, P. 17. , 22 APRIL  1
> 

It seems to me that the problem has to do with the index colum, which I need to keep in order to unstack my data later. screenshot of larger data.set

I just don't get why. Thanks for any help here!!

EDIT:

Wiktor to the rescue - this is what happens when I use his pattern. It takes the stuff I want to replace, but won't replace the whole pattern. And I still wonder why it would return different results in my own regex.

> print(allstacked2)
                                                              values ind                                        V3 V4
711                                [ANONYMOUS], 2010, COMMUNICATION.  V1                              notavailable  0
1297 (1986) ACTIVE MEASURES, , U.S. DEPARTMENT OF STATE, AUGUST 1986  V1                              notavailable  0
1588                        [ANONYMOUS], 2008, END UNLAWFUL ATTACKS.  V2  [ANONYMOUS], 2008, END UNLAWFUL ATTACKS.  1
3994                        (1900) NEW YORK TIMES, P. 17. , 22 APRIL  V3  (1900) NEW YORK TIMES, P. 17. , 22 APRIL  1
> allstacked2$V3 <- gsub("^[[:space:]]*(\\(\\d{4}\\)|\\[ANONYMOUS])[[:space:]]*", "", allstacked2$V3)
> allstacked2$V3 <- gsub("[[:space:]]+", " ", allstacked2$V3)
> 
> 
> print(allstacked2)
                                                              values ind                                V3 V4
711                                [ANONYMOUS], 2010, COMMUNICATION.  V1                      notavailable  0
1297 (1986) ACTIVE MEASURES, , U.S. DEPARTMENT OF STATE, AUGUST 1986  V1                      notavailable  0
1588                        [ANONYMOUS], 2008, END UNLAWFUL ATTACKS.  V2     , 2008, END UNLAWFUL ATTACKS.  1
3994                        (1900) NEW YORK TIMES, P. 17. , 22 APRIL  V3 NEW YORK TIMES, P. 17. , 22 APRIL  1
> 

enter image description here

Edit: Here the dput!

    > dput(allstacked2)
structure(list(values = c("[ANONYMOUS], 2010, COMMUNICATION.", 
"(1986) ACTIVE MEASURES, , U.S. DEPARTMENT OF STATE, AUGUST 1986", 
" [ANONYMOUS], 2008, END UNLAWFUL ATTACKS.", " (1900) NEW YORK TIMES, P. 17. , 22 APRIL"
), ind = structure(c(1L, 1L, 2L, 3L), .Label = c("V1", "V2", 
"V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", "V11", "V12", 
"V13", "V14", "V15", "V16", "V17", "V18", "V19", "V20", "V21", 
"V22", "V23", "V24", "V25", "V26", "V27", "V28", "V29", "V30", 
"V31", "V32", "V33", "V34", "V35", "V36", "V37", "V38", "V39", 
"V40", "V41", "V42", "V43", "V44", "V45", "V46", "V47", "V48", 
"V49", "V50", "V51", "V52", "V53", "V54", "V55", "V56", "V57", 
"V58", "V59", "V60", "V61", "V62", "V63", "V64", "V65", "V66", 
"V67", "V68", "V69", "V70", "V71", "V72", "V73", "V74", "V75", 
"V76", "V77", "V78", "V79", "V80", "V81", "V82", "V83", "V84", 
"V85", "V86", "V87", "V88", "V89", "V90", "V91", "V92", "V93", 
"V94", "V95", "V96", "V97", "V98", "V99", "V100", "V101", "V102", 
"V103", "V104", "V105", "V106", "V107", "V108", "V109", "V110", 
"V111", "V112", "V113", "V114", "V115", "V116", "V117", "V118", 
"V119", "V120", "V121", "V122", "V123", "V124", "V125", "V126", 
"V127", "V128", "V129", "V130", "V131", "V132", "V133", "V134", 
"V135", "V136", "V137", "V138", "V139", "V140", "V141", "V142", 
"V143", "V144", "V145", "V146", "V147", "V148", "V149", "V150", 
"V151", "V152", "V153", "V154", "V155", "V156", "V157", "V158", 
"V159", "V160", "V161", "V162", "V163", "V164", "V165", "V166", 
"V167", "V168", "V169", "V170", "V171", "V172", "V173", "V174", 
"V175", "V176", "V177", "V178", "V179", "V180", "V181", "V182", 
"V183", "V184", "V185", "V186", "V187", "V188", "V189", "V190", 
"V191", "V192", "V193", "V194", "V195", "V196", "V197", "V198", 
"V199", "V200", "V201", "V202", "V203", "V204", "V205", "V206", 
"V207", "V208", "V209", "V210", "V211", "V212", "V213", "V214", 
"V215", "V216", "V217", "V218", "V219", "V220", "V221", "V222", 
"V223", "V224", "V225", "V226", "V227", "V228", "V229", "V230", 
"V231", "V232", "V233", "V234", "V235", "V236", "V237", "V238", 
"V239", "V240", "V241", "V242", "V243", "V244", "V245", "V246", 
"V247", "V248", "V249", "V250", "V251", "V252", "V253", "V254", 
"V255", "V256", "V257", "V258", "V259", "V260", "V261", "V262", 
"V263", "V264", "V265", "V266", "V267", "V268", "V269", "V270", 
"V271", "V272", "V273", "V274", "V275", "V276", "V277", "V278", 
"V279", "V280", "V281", "V282", "V283", "V284", "V285", "V286", 
"V287", "V288", "V289", "V290", "V291", "V292", "V293", "V294", 
"V295", "V296", "V297", "V298", "V299", "V300", "V301", "V302", 
"V303", "V304", "V305", "V306", "V307", "V308", "V309", "V310", 
"V311", "V312", "V313", "V314", "V315", "V316", "V317", "V318", 
"V319", "V320", "V321", "V322", "V323", "V324", "V325", "V326", 
"V327", "V328", "V329", "V330", "V331", "V332", "V333", "V334", 
"V335", "V336", "V337", "V338", "V339", "V340", "V341", "V342", 
"V343", "V344", "V345", "V346", "V347", "V348", "V349", "V350", 
"V351", "V352", "V353", "V354", "V355", "V356", "V357", "V358", 
"V359", "V360", "V361", "V362", "V363", "V364", "V365", "V366", 
"V367", "V368", "V369", "V370", "V371", "V372", "V373", "V374", 
"V375", "V376", "V377", "V378", "V379", "V380", "V381", "V382", 
"V383", "V384", "V385", "V386", "V387", "V388", "V389", "V390", 
"V391", "V392", "V393", "V394", "V395", "V396", "V397", "V398", 
"V399", "V400", "V401", "V402", "V403", "V404", "V405", "V406", 
"V407", "V408", "V409", "V410", "V411", "V412", "V413", "V414", 
"V415", "V416", "V417", "V418", "V419", "V420", "V421", "V422", 
"V423", "V424", "V425", "V426", "V427", "V428", "V429", "V430", 
"V431", "V432", "V433", "V434", "V435", "V436", "V437", "V438", 
"V439", "V440", "V441", "V442", "V443", "V444", "V445", "V446", 
"V447", "V448", "V449", "V450", "V451", "V452", "V453", "V454", 
"V455", "V456", "V457", "V458", "V459", "V460", "V461", "V462", 
"V463", "V464", "V465", "V466", "V467", "V468", "V469", "V470", 
"V471", "V472", "V473", "V474", "V475", "V476", "V477", "V478", 
"V479", "V480", "V481", "V482", "V483", "V484", "V485", "V486", 
"V487", "V488", "V489", "V490", "V491", "V492", "V493", "V494", 
"V495", "V496", "V497", "V498", "V499", "V500", "V501", "V502", 
"V503", "V504", "V505", "V506", "V507", "V508", "V509", "V510", 
"V511", "V512", "V513", "V514", "V515", "V516", "V517", "V518", 
"V519", "V520", "V521", "V522", "V523", "V524", "V525", "V526", 
"V527", "V528", "V529", "V530", "V531", "V532", "V533", "V534", 
"V535", "V536", "V537", "V538", "V539", "V540", "V541", "V542", 
"V543", "V544", "V545", "V546", "V547", "V548", "V549", "V550", 
"V551", "V552", "V553", "V554", "V555", "V556", "V557", "V558", 
"V559", "V560", "V561", "V562", "V563", "V564", "V565", "V566", 
"V567", "V568", "V569", "V570", "V571", "V572", "V573", "V574", 
"V575", "V576", "V577", "V578", "V579", "V580", "V581", "V582", 
"V583", "V584", "V585", "V586", "V587", "V588", "V589", "V590", 
"V591", "V592", "V593", "V594", "V595", "V596", "V597", "V598", 
"V599", "V600", "V601", "V602", "V603", "V604", "V605", "V606", 
"V607", "V608", "V609", "V610", "V611", "V612", "V613", "V614", 
"V615", "V616", "V617", "V618", "V619", "V620", "V621", "V622", 
"V623", "V624", "V625", "V626", "V627", "V628", "V629", "V630", 
"V631", "V632", "V633", "V634", "V635", "V636", "V637", "V638", 
"V639", "V640", "V641", "V642", "V643", "V644", "V645", "V646", 
"V647", "V648", "V649", "V650", "V651", "V652", "V653", "V654", 
"V655", "V656", "V657", "V658", "V659", "V660", "V661", "V662", 
"V663", "V664", "V665", "V666", "V667", "V668", "V669", "V670", 
"V671", "V672", "V673", "V674", "V675", "V676", "V677", "V678", 
"V679", "V680", "V681", "V682", "V683", "V684", "V685", "V686", 
"V687", "V688", "V689", "V690", "V691", "V692", "V693", "V694", 
"V695", "V696", "V697", "V698", "V699", "V700", "V701", "V702", 
"V703", "V704", "V705", "V706", "V707", "V708", "V709", "V710", 
"V711", "V712", "V713", "V714", "V715", "V716", "V717", "V718", 
"V719", "V720", "V721", "V722", "V723", "V724", "V725", "V726", 
"V727", "V728", "V729", "V730", "V731", "V732", "V733", "V734", 
"V735", "V736", "V737", "V738", "V739", "V740", "V741", "V742", 
"V743", "V744", "V745", "V746", "V747", "V748", "V749", "V750", 
"V751", "V752", "V753", "V754", "V755", "V756", "V757", "V758", 
"V759", "V760", "V761", "V762", "V763", "V764", "V765", "V766", 
"V767", "V768", "V769", "V770", "V771", "V772", "V773", "V774", 
"V775", "V776", "V777", "V778", "V779", "V780", "V781", "V782", 
"V783", "V784", "V785", "V786", "V787", "V788", "V789", "V790", 
"V791", "V792", "V793", "V794", "V795", "V796", "V797", "V798", 
"V799", "V800", "V801", "V802", "V803", "V804", "V805", "V806", 
"V807", "V808", "V809", "V810", "V811", "V812", "V813", "V814", 
"V815", "V816", "V817", "V818", "V819", "V820", "V821", "V822", 
"V823", "V824", "V825", "V826", "V827", "V828", "V829", "V830", 
"V831", "V832", "V833", "V834", "V835", "V836", "V837", "V838", 
"V839", "V840", "V841", "V842", "V843", "V844", "V845", "V846", 
"V847", "V848", "V849", "V850", "V851", "V852", "V853", "V854", 
"V855", "V856", "V857", "V858", "V859", "V860", "V861", "V862", 
"V863", "V864", "V865", "V866", "V867", "V868", "V869", "V870", 
"V871", "V872", "V873", "V874", "V875", "V876", "V877", "V878", 
"V879", "V880", "V881", "V882", "V883", "V884", "V885", "V886", 
"V887", "V888", "V889", "V890", "V891", "V892", "V893", "V894", 
"V895", "V896", "V897", "V898", "V899", "V900", "V901", "V902", 
"V903", "V904", "V905", "V906", "V907", "V908", "V909", "V910", 
"V911", "V912", "V913", "V914", "V915", "V916", "V917", "V918", 
"V919", "V920", "V921", "V922", "V923", "V924", "V925", "V926", 
"V927", "V928", "V929", "V930", "V931", "V932", "V933", "V934", 
"V935", "V936", "V937", "V938", "V939", "V940", "V941", "V942", 
"V943", "V944", "V945", "V946", "V947", "V948", "V949", "V950", 
"V951", "V952", "V953", "V954", "V955", "V956", "V957", "V958", 
"V959", "V960", "V961", "V962", "V963", "V964", "V965", "V966", 
"V967", "V968", "V969", "V970", "V971", "V972", "V973", "V974", 
"V975", "V976", "V977", "V978", "V979", "V980", "V981", "V982", 
"V983", "V984", "V985", "V986", "V987", "V988", "V989", "V990", 
"V991", "V992", "V993", "V994", "V995", "V996", "V997", "V998", 
"V999", "V1000", "V1001", "V1002", "V1003", "V1004", "V1005", 
"V1006", "V1007", "V1008", "V1009", "V1010", "V1011", "V1012", 
"V1013", "V1014", "V1015", "V1016", "V1017", "V1018", "V1019", 
"V1020", "V1021", "V1022", "V1023", "V1024", "V1025", "V1026", 
"V1027", "V1028", "V1029", "V1030", "V1031", "V1032", "V1033", 
"V1034", "V1035", "V1036", "V1037", "V1038", "V1039", "V1040", 
"V1041", "V1042", "V1043", "V1044", "V1045", "V1046", "V1047", 
"V1048", "V1049", "V1050", "V1051", "V1052", "V1053", "V1054", 
"V1055", "V1056", "V1057", "V1058", "V1059", "V1060", "V1061", 
"V1062", "V1063", "V1064", "V1065", "V1066", "V1067", "V1068", 
"V1069", "V1070", "V1071", "V1072", "V1073", "V1074", "V1075", 
"V1076", "V1077", "V1078", "V1079", "V1080", "V1081", "V1082", 
"V1083", "V1084", "V1085", "V1086", "V1087", "V1088", "V1089", 
"V1090", "V1091", "V1092", "V1093", "V1094", "V1095", "V1096", 
"V1097", "V1098", "V1099", "V1100", "V1101", "V1102", "V1103", 
"V1104", "V1105", "V1106", "V1107", "V1108", "V1109", "V1110", 
"V1111", "V1112", "V1113", "V1114", "V1115", "V1116", "V1117", 
"V1118", "V1119", "V1120", "V1121", "V1122", "V1123", "V1124", 
"V1125", "V1126", "V1127", "V1128", "V1129", "V1130", "V1131", 
"V1132", "V1133", "V1134", "V1135", "V1136", "V1137", "V1138", 
"V1139", "V1140", "V1141", "V1142", "V1143", "V1144", "V1145", 
"V1146", "V1147", "V1148", "V1149", "V1150", "V1151", "V1152", 
"V1153", "V1154", "V1155", "V1156", "V1157", "V1158", "V1159", 
"V1160", "V1161", "V1162", "V1163", "V1164", "V1165", "V1166", 
"V1167", "V1168", "V1169", "V1170", "V1171", "V1172", "V1173", 
"V1174", "V1175", "V1176", "V1177", "V1178", "V1179", "V1180", 
"V1181", "V1182", "V1183", "V1184", "V1185", "V1186", "V1187", 
"V1188", "V1189", "V1190", "V1191", "V1192", "V1193", "V1194", 
"V1195", "V1196", "V1197", "V1198", "V1199", "V1200", "V1201", 
"V1202", "V1203", "V1204", "V1205", "V1206", "V1207", "V1208", 
"V1209", "V1210", "V1211", "V1212", "V1213", "V1214", "V1215", 
"V1216", "V1217", "V1218", "V1219", "V1220", "V1221", "V1222", 
"V1223", "V1224", "V1225", "V1226", "V1227", "V1228", "V1229", 
"V1230", "V1231", "V1232", "V1233", "V1234", "V1235", "V1236", 
"V1237", "V1238", "V1239", "V1240", "V1241", "V1242", "V1243", 
"V1244", "V1245", "V1246", "V1247", "V1248", "V1249", "V1250", 
"V1251", "V1252", "V1253", "V1254", "V1255", "V1256", "V1257", 
"V1258", "V1259", "V1260", "V1261", "V1262", "V1263", "V1264", 
"V1265", "V1266", "V1267", "V1268", "V1269", "V1270", "V1271", 
"V1272", "V1273", "V1274", "V1275", "V1276", "V1277", "V1278", 
"V1279", "V1280", "V1281", "V1282", "V1283", "V1284", "V1285", 
"V1286", "V1287", "V1288", "V1289", "V1290", "V1291", "V1292", 
"V1293", "V1294", "V1295", "V1296", "V1297", "V1298", "V1299", 
"V1300", "index", "index2"), class = "factor")), .Names = c("values", 
"ind"), row.names = c(711L, 1297L, 1588L, 3994L), class = "data.frame")
> 
Wiktor Stribiżew

You have some whitespaces at the start of the input. You need to make sure you match those with [[:space:]]*:

allstacked2$V3 <- gsub("^[[:space:]]*(\\(\\d{4}\\)|\\[ANONYMOUS],)[[:space:]]*", "", allstacked2$V3)
allstacked2$V3 <- gsub("[[:space:]]+", " ", allstacked2$V3)

See the R demo online.

Details

  • ^ - start of string
  • [[:space:]]* - 0+ whitespaces
  • (\\(\\d{4}\\)|\\[ANONYMOUS],) - one of the two alternatives:
    • \\(\\d{4}\\) - a (, 4 digits, )
    • | - or
    • \\[ANONYMOUS], - [ANONYMOUS], substring
  • [[:space:]]* - 0+ whitespaces

The [[:space:]] in a TRE regex will match Unicode whitespaces, so it is preferable than \s.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related