在R中重新编码变量

时间:2016-02-22 14:05:14

标签: regex r

我有一个包含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"

3 个答案:

答案 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的答案最为优雅;)