我得到 NA 在 R 中的字符列上应用 separate() 函数

I'm getting NA's applying separate() function over column of characters in R

我正在尝试拆分格式非常不同的列。例如:

pharma <- c("DOXORUBICINA CLORH. FAM 50MG POL O LIOF",
                   "DROSPIRENONA/ETINILESTR. 3/0,02MG CM REC",
                   "DROSPIRENONA/ETINILESTR. 3/0,03MG CM REC",
                   "ETRAVIRINA 100 MG CM",
                   "AGALSIDASA ALFA 1MG/ML X 3,5 ML FAM")

我正在使用 separate() 在两个不同的列中进行拆分(我需要将产品名称(即 DOXORUBICINA CLORH.FAM)和详细信息(50MG POL O LIOF)分开)。代码是:

separate(data.frame(A = pharma), col = "A" , into = c("x","y"),sep = "(?<=[a-zA-Z])\s*(?=[0-9])")

但我有来自 R 的下一个:

                                         x               y
1                  DOXORUBICINA CLORH. FAM 50MG POL O LIOF
2 DROSPIRENONA/ETINILESTR. 3/0,02MG CM REC            <NA>
3 DROSPIRENONA/ETINILESTR. 3/0,03MG CM REC            <NA>
4                               ETRAVIRINA       100 MG CM
5                          AGALSIDASA ALFA        1MG/ML X
Warning messages:
1: Expected 2 pieces. Additional pieces discarded in 1 rows [5]. 
2: Expected 2 pieces. Missing pieces filled with `NA` in 2 rows [2, 3]. 

我看不到发生了什么。

非常感谢任何帮助。提前致谢!

第二行和第三行的数据在字母和空格之间包含一个点,您的模式只占字母和数字之间的 0+ 个空格字符。

您可以使用

sep = "(?<=[a-zA-Z])\W+(?=[0-9])" 

sep = "(?<=[a-zA-Z])\W*(?=[0-9])"

\W 模式匹配任何非单词字符,除字母、数字和 _ 之外的任何字符。

参见regex demo

R 测试:

> separate(data.frame(A = pharma), col = "A" , into = c("x","y"), sep = "(?<=[a-zA-Z])\W*(?=[0-9])")
                        x               y
1 DOXORUBICINA CLORH. FAM 50MG POL O LIOF
2 DROSPIRENONA/ETINILESTR 3/0,02MG CM REC
3 DROSPIRENONA/ETINILESTR 3/0,03MG CM REC
4              ETRAVIRINA       100 MG CM

我们可以在 base R

do.call(rbind, strsplit(pharma, "(?<=[A-Za-z])\s+(?=[0-9])", perl = TRUE))