【发布时间】:2019-09-16 17:31:22
【问题描述】:
我有这种情况:
Column
00000000 H0200 5555
H2000 OOOOO4344p H2300
B1500 00000 R2222
B1000
这只是一列,我需要为每一行获取以 H 或 B 开头的第一个值,这样:
Column
H0200
H2000
B1500
B1000
我尝试了几个命令 gsub、strsplit、substr 等。但我无法为此做条件。
【问题讨论】:
我有这种情况:
Column
00000000 H0200 5555
H2000 OOOOO4344p H2300
B1500 00000 R2222
B1000
这只是一列,我需要为每一行获取以 H 或 B 开头的第一个值,这样:
Column
H0200
H2000
B1500
B1000
我尝试了几个命令 gsub、strsplit、substr 等。但我无法为此做条件。
【问题讨论】:
一个选项是str_extract from stringr,通过匹配单词边界 (\\b) 中的 'H' 或 (|) 'B' 字符后跟多一个数字 (\\d+) 和单词边界 (\\b)
library(stringr)
df1$Column <- str_extract(df1$Column, "\\b(H|B)\\d+\\b")
【讨论】:
sapply(strsplit(d$Column, " "), function(s)
s[substring(s, 1, 1) %in% c("H", "B")][1])
#[1] "H0200" "H2000" "B1500" "B1000"
或
sub(".*?([H|B]\\w+).*", "\\1", d$Column)
#[1] "H0200" "H2000" "B1500" "B1000"
数据
d = structure(list(Column = c("00000000 H0200 5555",
"H2000 OOOOO4344p H2300",
"B1500 00000 R2222",
"B1000")),
class = "data.frame",
row.names = c(NA, -4L))
【讨论】: