首页 > 解决方案 > 如何根据R中的字符向量从df中提取部分字符串

问题描述

我想根据字符向量从 df 中的字符串变量中提取数字。

# sample data
numbers <- as.character(seq(1000, 9900, 100))
df <- tibble(numbers)%>%
rename(string = 1)%>%
mutate(string = paste("some text", string, "another text"))

在实际数据中,每一行中的字符串具有不同的长度。我的目标是创建一个新变量,其中包含从“字符串”变量中提取的数字。我对 R 很陌生。通常我会做这样的事情。

df2 <- df %>%
mutate(number = case_when(str_detect(string, "1000")==T ~ "1000",
                          str_detect(string, "1100")==T ~ "1100",
                          #don't want to type this 88 times more!
                          TRUE~string))

我想到了某种循环。我试过这个,但它没有用。

for(i in numbers){
df2 <-  mutate(df, number = case_when(str_detect(string, i)==T ~ i,
                                      TRUE~string))
}

虽然我明白,为什么我的循环没有达到预期的结果,但我想不出任何其他解决方案。我将不胜感激。

标签: rloops

解决方案


嗨,这应该是您正在寻找的:

library(stringr)

df$num <- str_extract(df$string, '\\d\\d\\d\\d') # first pattern
df$num <- str_extract_all(df$string, '\\d\\d\\d\\d') # all patterns

推荐阅读