首页 > 解决方案 > R从变量中提取特定文本

问题描述

我有一个包含此列的数据框:

VAR1
var_1.1
var_1.2
var_1.3
var_2.1
var_2.2
var_2.3

所以我想要的是创建一个只保留的新列

VAR1    VAR2
var_1.1  1
var_1.2  1
var_1.3  1
var_2.1  2
var_2.2  2
var_2.3  2

基本上保留了“_”和“.”之间的文字。

谢谢!

标签: rdplyrtidyverse

解决方案


我们可以使用str_extract匹配一个或多个数字 ( \\d+)_后跟.

df1 %>%
     mutate(VAR2 = str_extract(VAR1, "(?<=_)\\d+(?=\\.)"))
#     VAR1 VAR2
#1 var_1.1    1
#2 var_1.2    1
#3 var_1.3    1
#4 var_2.1    2
#5 var_2.2    2
#6 var_2.3    2

str_replace将数字捕获为一个组,并在替换中指定捕获组的反向引用

df1 %>% 
       mutate(VAR2 = str_replace(VAR1, ".*_(\\d+)\\..*", "\\1"))

subbase R

sub(".*_(\\d+)\\..*", "\\1", df1$VAR1)

数据

df1 <- structure(list(VAR1 = c("var_1.1", "var_1.2", "var_1.3", "var_2.1", 
"var_2.2", "var_2.3")), class = "data.frame", row.names = c(NA, 
-6L))

推荐阅读