r - 从字符串中提取数字并将其转换为数字
问题描述
假设我有一个带有向量 A:E 的数据框,其中向量 E 如下所示:
ABCDEF50GH
ABCDEF600GH
ABCDEF50GH
ABCDEF1000GH
我的部分代码如下所示:
DF <- (filter(DF1, A == "AH") %>%
mutate(B = nchar(E),
C = case_when(D == "X" ~ "0",
B == 10 ~ substr(E, 7, 8),
B == 11 ~ substr(E, 7, 9),
B == 12 ~ substr(E, 7, 10),
TRUE ~ "0")))
所以我尝试从字符串中提取一个数字。问题是,提取的数字是一个字符而不是数字,所以我需要将 case_when 的其他参数也作为字符。因此向量 C 是一个字符向量,当我尝试将其转换为数字时:
transform(DF, C = as.numeric(levels(C))[C])
我得到一个带有 NA 而不是数字的向量。
请帮忙
解决方案
你可以使用 stringr 包来做到这一点
text <- as.data.frame(c("ABCDEF50GH",
"ABCDEF600GH",
"ABCDEF50GH",
"ABCDEF1000GH"))
colnames(text)<-c("names")
library(stringr )
text$numerics <- str_extract(text$names, "[[:digit:]]+")
如果要将其转换为数字,只需添加 as.numeric
text$numerics <- as.numeric(str_extract(text$names, "[[:digit:]]+"))