在识别出满足非数字模式的字符向量中的元素之后,如何将连续满足regex模式的那些元素粘贴在一起?
sample_text
主要包含两种模式:
但是,有一些非数字文本实例属于其前面的奇数元素。
以前,我不知道字符向量中连续的非数字元素。这使我可以将每个非数字元素手动粘贴到该元素,该元素直接位于非数字元素后面两个元素。
# load necessary package
library(tidyverse) --------
# load necessary data ------
sample_text <-
c("811411 Home and Garden Equipment Repair and"
, "7699 Repair Services, Nec"
, "Maintenance" # non-digit pattern
, "811412 Appliance Repair and Maintenance"
, "7623 Refrigeration Service and Repair"
, "811412 Appliance Repair and Maintenance"
, "7629 Electrical Repair Shops")
# previous solution -------
sample_text %>%
# for those elements which satisfy the non-digit pattern
# identify the index of those elements which are exactly two behind
replace(list = str_detect(., "^\\D*$") %>% which() - 2
# of those elements which are exactly two behind the non-digit pattern
# paste the non-digit pattern to the end of them.
, values = paste(.[str_detect(., "^\\D*$") %>% which() - 2]
, str_subset(., "^\\D*$"))) %>%
# only keep elements with digits
str_subset("\\d")
# [1] "811411 Home and Garden Equipment Repair and Maintenance" # successfully copied the non-digit element and pasted it two elements behind
# [2] "7699 Repair Services, Nec"
# [3] "811412 Appliance Repair and Maintenance"
# [4] "7623 Refrigeration Service and Repair"
# [5] "811412 Appliance Repair and Maintenance"
# [6] "7629 Electrical Repair Shops"
# end of script #
现在我意识到sample_text
包含连续的非数字元素,因此我不确定如何更新以前的解决方案。任何帮助将不胜感激!
# sample data -----
sample_text <-
c("811310 Commercial and Industrial Machinery and"
, "7692 Welding Repair"
, "Equipment (except Automotive and" # non-digit pattern (1/2)
, "Electronic) Repair and Maintenance" # non-digit pattern (2/2)
, "811310 Commercial and Industrial Machinery and"
, "7694 Armature Rewinding Shops"
, "Equipment (except Automotive and" # non-digit pattern (1/2)
, "Electronic) Repair and Maintenance" # non-digit pattern (2/2)
, "811310 Commercial and Industrial Machinery and"
, "7699 Repair Services, Nec"
, "Equipment (except Automotive and" # non-digit pattern (1/2)
, "Electronic) Repair and Maintenance" # non-digit pattern (2/2)
, "811411 Home and Garden Equipment Repair and"
, "7699 Repair Services, Nec"
, "Maintenance" # non-digit pattern (1/1)
, "811412 Appliance Repair and Maintenance"
, "7623 Refrigeration Service and Repair"
, "811412 Appliance Repair and Maintenance"
, "7629 Electrical Repair Shops"
, "811412 Appliance Repair and Maintenance"
, "7699 Repair Services, Nec")
# desired output ------
[1] "811310 Commercial and Industrial Machinery and Equipment (except Automotive and Electronic) Repair and Maintenance"
[2] "7692 Welding Repair"
[3] "811310 Commercial and Industrial Machinery and Equipment (except Automotive and Electronic) Repair and Maintenance"
[4] "7694 Armature Rewinding Shops"
[5] "811310 Commercial and Industrial Machinery and Equipment (except Automotive and Electronic) Repair and Maintenance"
[6] "7699 Repair Services, Nec"
[7] "811411 Home and Garden Equipment Repair and Maintenance"
[8] "7699 Repair Services, Nec"
[9] "811412 Appliance Repair and Maintenance"
[10] "7623 Refrigeration Service and Repair"
[11] "811412 Appliance Repair and Maintenance"
[12] "7629 Electrical Repair Shops"
[13] "811412 Appliance Repair and Maintenance"
[14] "7699 Repair Services, Nec"
答案 0 :(得分:1)
从预期的输出中猜测,您遍历向量,并且如果一行不包含任何数字,则应将其添加到元素之前,即当前index - 1:
x <- c()
for(i in sample_text){
if(grepl("^\\D*$",i, perl=TRUE)) {
x[length(x)-1] <- paste(x[length(x)-1], i)
} else {
x <- c(x, i) #append
}
}
输出:
[1] "811310 Commercial and Industrial Machinery and Equipment (except Automotive and Electronic) Repair and Maintenance"
[2] "7692 Welding Repair"
[3] "811310 Commercial and Industrial Machinery and Equipment (except Automotive and Electronic) Repair and Maintenance"
[4] "7694 Armature Rewinding Shops"
[5] "811310 Commercial and Industrial Machinery and Equipment (except Automotive and Electronic) Repair and Maintenance"
[6] "7699 Repair Services, Nec"
[7] "811411 Home and Garden Equipment Repair and Maintenance"
[8] "7699 Repair Services, Nec"
[9] "811412 Appliance Repair and Maintenance"
[10] "7623 Refrigeration Service and Repair"
[11] "811412 Appliance Repair and Maintenance"
[12] "7629 Electrical Repair Shops"
[13] "811412 Appliance Repair and Maintenance"
[14] "7699 Repair Services, Nec"