我得到 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))
我正在尝试拆分格式非常不同的列。例如:
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))