我有一个包含6个变量的数据框,其中一个看起来像这样:
a_title
2 LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),2m,opal,2 Stucke,4 Stucke]
3 LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),1m,opal,ohne,2 Stucke]
正如您所看到的,标题很长且令人困惑。来自这个长字符串的重要数据只是“Typ-3”和“1m或2m”。
我的目标是将这个长字符串重新编码为类似的东西 - > “Typ-3 2m”
我试图自己解决它,我经常碰到墙。我设法写了这个但是不行:
data$a_title[data$a_title=="Typ-1" | ",1m,"] <- "Typ-1 1m"
答案 0 :(得分:3)
这里有很多人比我更熟练的正则表达式,但这似乎适用于你提供的字符串。它使用两个捕获组,并结合第二组(逗号)周围的一些识别功能。
dat$typ <- gsub(".+(Typ-[0-9]+).+),([0-9]+m),.+","\\1 \\2",dat$a_title)
答案 1 :(得分:0)
您可以使用recode
包中的car
命令。这是一个例子。首先,我生成一个包含您提到的类别的向量:
x <- c(rep("LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),2m,opal,2 Stucke,4 Stucke]",3),
rep("LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),1m,opal,ohne,2 Stucke]",2))
此向量如下所示:
> x
[1] "LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),2m,opal,2 Stucke,4 Stucke]"
[2] "LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),2m,opal,2 Stucke,4 Stucke]"
[3] "LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),2m,opal,2 Stucke,4 Stucke]"
[4] "LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),1m,opal,ohne,2 Stucke]"
[5] "LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),1m,opal,ohne,2 Stucke]"
现在我可以重新编码此向量(确保所有'
和"
都在正确的位置):
library(car)
y <- recode(x, "'LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),2m,opal,2 Stucke,4 Stucke]'='Typ1';
'LED Aluprofil 1m 2m fur LED Streifen Abdeckung ALU[Typ-3 (16121),1m,opal,ohne,2 Stucke]'='Typ2'")
检查它是否有效:
> y
[1] "Typ1" "Typ1" "Typ1" "Typ2" "Typ2"
或转换为因素:
> as.factor(y)
[1] Typ1 Typ1 Typ1 Typ2 Typ2
Levels: Typ1 Typ2
答案 2 :(得分:0)
这也可行
matches = sapply(c("Typ-\\d", "\\dm"), function(x) regmatches(a, regexpr(x, a)))
paste(matches, collapse=" ")
虽然到目前为止我发现Heroka的答案最为优雅;)