R qdap :: mgsub防止替换本身被替换

时间:2016-02-29 13:21:09

标签: r replace qdap

我试图用另一种模式替换模式,其中包含要用qdap::mgsub替换的模式。问题是,它将再次替换替换中的原始模式,例如:

library(qdap)
mgsub(c("102", "981"), c("ow_102", "Q_1028"), c("102", "981", "102", "981", "981", "981"))

给出:

[1] "ow_102"    "Q_ow_1028" "ow_102"    "Q_ow_1028" "Q_ow_1028" "Q_ow_1028"

我想让它给我:

[1] "ow_102"  "Q_1028"  "ow_102"  "Q_1028"  "Q_1028"  "Q_1028"

我无法找到qdap:mgsub的任何论据,这会阻止执行两次的功能,或者无论它做什么来替换自己替换的部分。

编辑:

由于数据包stringi在某些其他方面失败,这里有一个扩展示例:

#Patterns to be replaced:
x <- c(93L, 94L, 95L, 96L, 97L, 98L, 99L, 100L, 101L, 102L, 103L, 
104L, 105L, 106L, 107L, 108L, 109L, 110L, 111L, 112L, 113L, 114L, 
115L, 116L, 117L, 118L, 119L, 120L, 121L, 122L, 123L, 124L, 125L, 
126L, 127L, 128L, 129L, 130L, 131L, 132L, 133L, 134L, 135L, 136L, 
137L, 138L, 139L, 140L, 141L, 142L, 143L, 144L, 145L, 146L, 147L, 
148L, 149L, 150L, 198L, 199L, 200L, 201L, 202L, 203L, 204L, 205L, 
527L, 528L, 529L, 530L, 531L, 532L, 533L, 534L, 535L, 536L, 537L, 
538L, 539L, 540L, 934L, 935L, 936L, 937L, 938L, 939L, 940L, 941L, 
942L, 943L, 944L, 945L, 946L, 947L, 948L, 949L, 950L, 951L, 952L, 
953L, 954L, 955L, 956L, 957L, 958L, 959L, 960L, 961L, 962L, 963L, 
964L, 965L, 966L, 967L, 968L, 969L, 970L, 971L, 972L, 973L, 974L, 
975L, 976L, 977L, 978L, 979L, 980L, 981L, 982L, 983L, 984L, 985L, 
986L, 987L, 988L, 989L, 990L, 991L, 992L, 993L, 994L, 995L, 996L, 
997L, 998L, 999L, 1005L, 1008L, 1009L)

#Replacement (so the first "pattern to be replaced" is to be replaced by the first "replacement", the second with the second and so on)
rep <- c("ow_93", "ow_94", "ow_95", "ow_96", "ow_97", "ow_98", "ow_99", 
"ow_100", "ow_101", "ow_102", "ow_103", "ow_104", "ow_105", "ow_106", 
"ow_107", "ow_108", "ow_109", "ow_110", "ow_111", "ow_112", "ow_113", 
"ow_114", "ow_115", "ow_116", "ow_117", "ow_118", "ow_119", "ow_120", 
"ow_121", "ow_122", "ow_123", "ow_124", "ow_125", "ow_126", "ow_127", 
"ow_128", "ow_129", "ow_130", "ow_131", "ow_132", "ow_133", "ow_134", 
"ow_135", "ow_136", "ow_137", "ow_138", "ow_139", "ow_140", "ow_141", 
"ow_142", "ow_143", "ow_144", "ow_145", "ow_146", "ow_147", "ow_148", 
"ow_149", "ow_150", "gw_t_198", "gw_f_199", "gw_f_200", "gw_t_201", 
"gw_f_202", "gw_t_203", "gw_t_204", "gw_t_205", "Parmen_OP", 
"Parmen_UP", "Schönerm.-Wilhelmsh._Besch.mst", "HyDdw_7/79_OP,_Bollmannshof", 
"HyDdw_7/79_UP,_Bollmannshof", "HyDdw_8/78,_Schapow", "HyDdw_11/78,_Fischershof", 
"Prenzlau,_Kuhdamm_OP", "Prenzlau,_Kuhdamm_UP", "HyPr_109/84_OP,_SchenkenbergOP", 
"HyPr_109/84_UP,_SchenkenbergUP", "HyPr_110/84_OP,_Kleptow_OP", 
"HyPr_110/84_UP,_Kleptow_UP", "Gerswalde,Beschaffenheitsmst.", 
"Soll_Q28", "Soll_Q40", "Soll_Q52", "Soll_Q87", "Soll_Q88", "Soll_Q91", 
"Soll_Q93", "Soll_Q133", "Soll_Q149", "Soll_Q183", "Soll_Q187", 
"Soll_Q190", "Soll_Q235", "Soll_Q236", "Soll_Q258", "Soll_Q259", 
"Soll_Q265", "Soll_Q269", "Soll_Q274", "Soll_Q275", "Soll_Q287", 
"Soll_Q311", "Soll_Q312", "Soll_Q341", "Soll_Q393", "Soll_Q394", 
"Soll_Q606", "Soll_Q607", "Soll_Q608", "Soll_Q630", "Soll_Q639", 
"Soll_Q805", "Soll_Q807", "Soll_Q808", "Soll_Q878", "Soll_Q879", 
"Soll_Q880", "Soll_Q882", "Soll_Q892", "Soll_Q893", "Soll_Q907", 
"Soll_Q908", "Soll_Q910", "Soll_Q911", "Soll_Q939", "Soll_Q940", 
"Soll_Q942", "Soll_Q1028", "Soll_Q1061", "Soll_Q1189", "Soll_Q1228", 
"Soll_Q1229", "Soll_Q1338", "Soll_Q1362", "Soll_Q1510", "Soll_Q1590", 
"Soll_Q1598", "Soll_Q1599", "Soll_Q1604", "Soll_Pfützentyp_ggü_Q1604", 
"Soll_Q2484", "Soll_Q2489", "Soll_Q2565", "Soll_Q?_S021_Boisterfelde", 
"Soll_Q647", "Soll_Q388", "Soll_Q319", "Soll_Rittgarten", "Soll_Kraatz")

#Vector wherein the replacements are to take place
art <- c(112L, 93L, 95L, 97L, 98L, 100L, 118L, 128L, 133L, 110L, 108L, 
107L, 104L, 107L, 104L, 108L, 110L, 100L, 133L, 112L, 93L, 95L, 
97L, 98L, 128L, 133L, 118L, 128L, 112L, 93L, 95L, 97L, 98L, 100L, 
110L, 108L, 107L, 104L, 112L, 93L, 95L, 97L, 98L, 100L, 118L, 
128L, 133L, 110L, 108L, 107L, 104L, 112L, 93L, 95L, 97L, 98L, 
100L, 110L, 108L, 107L, 104L, 128L, 118L, 133L, 948L, 949L, 953L, 
940L, 939L, 937L, 938L, 994L, 983L, 995L, 969L, 970L, 972L, 973L, 
982L, 990L, 996L, 133L, 110L, 108L, 107L, 104L, 112L, 93L, 95L, 
97L, 98L, 100L, 118L, 128L, 133L, 104L, 107L, 108L, 110L, 100L, 
98L, 97L, 95L, 118L, 112L, 93L, 128L, 112L, 93L, 95L, 97L, 98L, 
118L, 128L, 133L, 104L, 108L, 110L, 107L, 100L, 133L, 107L, 104L, 
108L, 110L, 100L, 98L, 97L, 112L, 93L, 95L, 118L, 128L, 112L, 
93L, 95L, 97L, 98L, 100L, 107L, 110L, 108L, 104L, 133L, 118L, 
128L, 133L, 107L, 104L, 108L, 110L, 100L, 98L, 97L, 93L, 95L, 
118L, 128L, 112L, 93L, 95L, 97L, 98L, 118L, 128L, 133L, 104L, 
107L, 108L, 110L, 100L, 112L, 93L, 95L, 97L, 98L, 100L, 110L, 
128L, 133L, 107L, 104L, 108L, 110L, 100L, 98L, 97L, 112L, 93L, 
95L, 118L, 128L, 203L, 202L, 201L, 200L, 198L, 199L, 204L, 955L, 
952L, 967L, 949L, 974L, 966L, 948L, 953L, 976L, 954L, 975L, 956L, 
957L, 977L, 988L, 941L, 945L, 950L, 951L, 958L, 959L, 963L, 964L, 
965L, 969L, 970L, 971L, 972L, 973L, 960L, 961L, 962L, 981L, 983L, 
984L, 987L, 984L, 994L, 995L, 112L, 93L, 95L, 97L, 98L, 100L, 
110L, 108L, 107L, 104L, 133L, 118L, 128L, 936L, 942L, 943L, 944L, 
946L, 947L, 978L, 979L, 980L, 986L, 989L, 990L, 991L, 992L, 996L, 
997L, 935L, 934L, 993L, 112L, 93L, 95L, 97L, 98L, 118L, 128L, 
133L, 100L, 110L, 108L, 107L, 104L, 949L, 966L, 963L, 998L, 964L, 
959L, 999L, 958L, 995L, 983L, 994L, 949L, 953L, 952L, 948L, 954L, 
955L, 956L, 988L, 967L, 966L, 966L, 966L, 966L, 949L, 949L, 949L, 
112L, 93L, 95L, 97L, 98L, 100L, 107L, 104L, 108L, 110L, 133L, 
118L, 128L, 957L, 965L, 968L, 971L, 973L, 972L, 992L, 993L, 996L, 
986L, 990L, 991L, 989L, 936L, 980L, 979L, 978L, 976L, 974L, 977L, 
984L, 985L, 987L, 934L, 949L, 949L, 949L, 966L, 966L, 966L, 947L, 
961L, 960L, 945L, 944L, 943L, 951L, 950L, 949L, 966L, 966L, 967L, 
988L, 112L, 93L, 95L, 97L, 98L, 118L, 128L, 133L, 100L, 107L, 
108L, 104L, 941L, 953L, 952L, 949L, 948L, 949L, 966L, 949L, 949L, 
949L, 966L, 966L, 966L, 997L, 1005L, 934L, 994L, 995L, 983L, 
949L, 949L, 949L, 966L, 966L, 966L, 949L, 966L, 112L, 93L, 95L, 
97L, 98L, 133L, 104L, 100L, 118L, 128L, 949L, 966L, 949L, 949L, 
949L, 966L, 966L, 966L, 949L, 966L, 949L, 949L, 949L, 966L, 966L, 
966L, 112L, 93L, 95L, 98L, 100L, 104L, 118L, 128L, 133L, 97L, 
949L, 966L, 966L, 966L, 966L, 949L, 949L, 949L, 949L, 966L, 949L, 
949L, 949L, 966L, 966L, 966L, 949L, 966L, 949L, 949L, 949L, 966L, 
966L, 966L, 950L, 951L, 954L, 955L, 956L, 948L, 952L, 953L, 133L, 
104L, 100L, 98L, 97L, 95L, 93L, 112L, 128L, 118L, 107L, 949L, 
966L, 949L, 949L, 949L, 966L, 966L, 966L, 949L, 966L, 949L, 949L, 
949L, 966L, 966L, 966L, 941L, 945L, 944L, 943L, 994L, 961L, 957L, 
965L, 963L, 959L, 958L, 983L, 980L, 970L, 971L, 972L, 990L, 974L, 
977L, 133L, 112L, 93L, 95L, 97L, 98L, 100L, 118L, 128L, 107L, 
104L, 949L, 966L, 949L, 949L, 949L, 966L, 966L, 966L, 949L, 966L, 
112L, 93L, 95L, 97L, 98L, 100L, 118L, 128L, 133L, 110L, 108L, 
107L, 104L, 133L, 104L, 107L, 108L, 110L, 100L, 98L, 97L, 93L, 
112L, 95L, 118L, 128L, 949L, 966L, 112L, 97L, 98L, 133L, 104L, 
107L, 108L, 110L, 100L, 95L, 93L, 118L, 128L, 202L, 201L, 200L, 
198L, 199L, 104L, 204L, 949L, 966L, 133L, 104L, 107L, 110L, 108L, 
959L, 965L, 994L, 983L, 995L, 960L, 961L, 112L, 93L, 95L, 97L, 
98L, 100L, 118L, 128L, 942L, 943L, 944L, 950L, 951L, 945L, 948L, 
954L, 980L, 978L, 984L, 985L, 934L, 992L, 990L, 986L, 974L, 977L, 
976L, 972L, 956L, 955L, 954L, 953L, 949L, 966L, 949L, 966L, 112L, 
93L, 128L, 118L, 95L, 97L, 98L, 100L, 133L, 104L, 107L, 949L, 
966L, 949L, 949L, 949L, 966L, 966L, 966L, 949L, 966L, 112L, 93L, 
95L, 104L, 107L, 100L, 133L, 97L, 98L, 118L, 128L, 949L, 966L, 
966L, 966L, 949L, 966L, 966L, 966L, 966L, 112L, 93L, 95L, 97L, 
98L, 100L, 104L, 118L, 128L, 133L, 980L, 943L, 972L, 974L, 977L, 
965L, 992L, 990L, 950L, 966L, 956L, 955L, 949L, 966L, 966L, 133L, 
104L, 98L, 97L, 95L, 112L, 93L, 118L, 128L, 983L, 133L, 128L, 
112L, 93L, 95L, 104L, 100L, 97L, 98L, 118L, 133L, 104L, 100L, 
98L, 97L, 95L, 93L, 112L, 118L, 128L, 133L, 104L, 100L, 98L, 
97L, 112L, 93L, 95L, 118L, 128L, 950L, 992L, 990L, 980L, 977L, 
974L, 972L, 965L, 966L, 955L, 956L, 952L, 949L, 133L, 104L, 107L, 
108L, 110L, 100L, 112L, 93L, 95L, 97L, 98L, 118L, 128L, 133L, 
107L, 104L, 108L, 110L, 100L, 98L, 97L, 112L, 93L, 95L, 118L, 
128L, 133L, 107L, 104L, 108L, 110L, 100L, 97L, 118L, 128L, 112L, 
93L, 95L, 98L, 133L, 128L, 112L, 93L, 95L, 97L, 98L, 110L, 108L, 
100L, 118L, 104L, 107L, 965L, 959L, 995L, 983L, 994L, 960L, 961L, 
962L, 985L, 984L, 947L, 980L, 979L, 978L, 942L, 944L, 943L, 945L, 
950L, 974L, 975L, 977L, 976L, 973L, 972L, 966L, 1005L, 993L, 
992L, 986L, 989L, 935L, 934L, 948L, 949L, 954L, 953L, 956L, 955L, 
133L, 128L, 112L, 93L, 95L, 97L, 98L, 100L, 118L, 107L, 104L, 
1009L, 1009L, 1009L, 1008L, 1008L, 1008L, 112L, 93L, 95L, 97L, 
98L, 110L, 108L, 100L, 118L, 128L, 133L, 104L, 966L, 949L, 980L, 
953L, 956L, 955L, 948L, 965L, 972L, 974L, 977L, 989L, 992L, 994L, 
133L, 104L, 118L, 128L, 100L, 95L, 93L, 112L, 97L, 98L, 958L, 
957L, 950L, 949L, 1008L, 1008L, 1008L, 966L, 1009L, 1009L, 1009L, 
1009L, 948L, 949L, 953L, 952L, 954L, 991L, 1008L, 1008L, 1009L, 
1009L, 1009L, 953L, 956L, 948L, 955L, 966L, 133L, 97L, 98L, 118L, 
128L, 112L, 93L, 95L, 980L, 977L, 972L, 994L, 133L, 128L, 112L, 
93L, 95L, 97L, 98L, 118L, 1008L, 1008L, 1009L, 1009L, 949L, 966L, 
133L, 104L, 107L, 98L, 97L, 95L, 118L, 112L, 93L, 128L, 1008L, 
949L, 966L, 949L, 966L, 1008L, 949L, 966L, 133L, 104L, 107L, 
108L, 110L, 100L, 118L, 128L, 112L, 93L, 95L, 97L, 98L, 949L, 
966L, 1008L, 1008L, 1008L, 1009L, 1009L, 1009L, 1009L)

0 个答案:

没有答案