首页 > 解决方案 > 从字符串中提取数字并将其转换为数字

问题描述

假设我有一个带有向量 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 而不是数字的向量。

请帮忙

标签: rstringdataformat

解决方案


你可以使用 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:]]+"))

推荐阅读