我在dataframe列下面有一个数据-
X_ABC_123_DF</n>
A_NJU_678_PP</n>
J_HH_99_LL</n>
II_00_777_PPP</n>
Run Code Online (Sandbox Code Playgroud)
我想为数据帧中的每一行提取第二个和第三个下划线之间的值,我正计划创建一个新列并存储这些值。用R写这个。我不确定如何写它的regex函数。
^(?:[^_]+_){2}([^_ ]+)<br>
Run Code Online (Sandbox Code Playgroud)
一些解决方案:
df$values = sapply(strsplit(df$V1, "_"), function(x) x[3])
df$values = gsub("(.*_){2}(\\d+)_.+", "\\2", df$V1)
library(dplyr)
library(stringr)
df %>%
mutate(values = str_extract(V1, "\\d+(?=_[a-zA-Z]+.+$)"))
Run Code Online (Sandbox Code Playgroud)
结果:
V1 values
1 X_ABC_123_DF</n> 123
2 A_NJU_678_PP</n> 678
3 J_HH_99_LL</n> 99
4 II_00_777_PPP</n> 777
Run Code Online (Sandbox Code Playgroud)
数据:
df = read.table(text = "X_ABC_123_DF</n>
A_NJU_678_PP</n>
J_HH_99_LL</n>
II_00_777_PPP</n>", stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)