Вот выдержка из моих данных:
"глифосат (HB C), атразин (HB C), метамат калия (FUN, HB C, INS, NEM ), дихлорпропен (HB C, NEM), метолахлор (-ы) (HB C), хлороталонил (FUN), хлорпикрин (NEM), bacillus amyloliquifacien (FUN), 2,4-d (HB C) , PGR) "
Я хочу, чтобы этот пример выглядел так:
![Split data](https://i.stack.imgur.com/OcTjX.png)
Я знаю все возможные сокращения (HB C, FUN et c) если это поможет.
Это то, что я пробовал до сих пор.
str = "glyphosate (HBC), atrazine (HBC), dichloropropene (HBC, NEM), metolachlor(-s) (HBC), chlorothalonil (FUN), chloropicrin (NEM), bacillus amyloliquifacien (FUN), 2,4-d (HBC, PGR), pendimethalin (HBC), metam (FUN, HBC, INS, NEM), acetochlor (HBC), metribuzin (HBC), dicamba (HBC), phorate (INS), chlorpyrifos (ACA, INS), flutolanil (FUN), paraquat (HBC), propazine (HBC), dimethenamid(-p) (HBC, FUN), bromoxynil (HBC)"
vec = unlist(unlist(strsplit(str, " ()")))
vec_clean = gsub('^\\(|\\),|\\,|)$', '', vec)
matrix(vec_clean,nrow = 24,ncol = 2, byrow = TRUE)
Что дает мне:
> matrix(vec_clean,nrow = 24,ncol = 2, byrow = TRUE)
[,1] [,2]
[1,] "glyphosate" "HBC"
[2,] "atrazine" "HBC"
[3,] "dichloropropene" "HBC"
[4,] "NEM" "metolachlor(-s"
[5,] "HBC" "chlorothalonil"
[6,] "FUN" "chloropicrin"
[7,] "NEM" "bacillus"
[8,] "amyloliquifacien" "FUN"
[9,] "24-d" "HBC"
[10,] "PGR" "pendimethalin"
[11,] "HBC" "metam"
[12,] "FUN" "HBC"
[13,] "INS" "NEM"
[14,] "acetochlor" "HBC"
[15,] "metribuzin" "HBC"
[16,] "dicamba" "HBC"
[17,] "phorate" "INS"
[18,] "chlorpyrifos" "ACA"
[19,] "INS" "flutolanil"
[20,] "FUN" "paraquat"
[21,] "HBC" "propazine"
[22,] "HBC" "dimethenamid(-p"
[23,] "HBC" "FUN"
[24,] "bromoxynil" "HBC"
Аргумент, который я использую в str split "()", был вызван методом проб и ошибок, и я не совсем понимаю, почему это работает в некоторой степени. Я попытался удалить ведущий и конечный "(" и ",)", используя пример, который я изменил отсюда: условно удалить начальный или конечный символ `.` в R
Так что это начало, но когда ингредиент имеет больше сокращений, например (FUN, HB C et c), он также разбивает его там. Он также удаляет "," из 2,4-го числа и между сокращениями, чего не должно быть. Он удаляет завершающий знак ")" из диметенамида (-p), который также не должен.