在列中,如何重新编码序列中的数据?

时间:2019-01-17 20:06:25

标签: r regex dataframe

在我的数据框中,我有一列名为“颜色”。 “颜色”列中的数据如下所示:

Red001.jpeg
Red002.jpeg
Red003.jpeg
Red004.jpeg
... you get the pattern...
Red999.jpeg

Blue001.jpeg
...
Blue999.jpeg

Green001.jpeg
...
Green999.jpeg

Yellow001.jpeg
...
Yellow999.jpeg

我想将Red001.jpeg通过Red999.jpeg更改为Red。同样,我也需要使用BlueGreenYellow来执行此操作。如何使该过程自动化?

3 个答案:

答案 0 :(得分:3)

一个简单的正则表达式就可以做到。

sub("(^[[:alpha:]]+)[[:digit:]]*.*", "\\1", color)
# [1] "Red"    "Red"    "Red"    "Red"    "Red"    "Blue"  
# [7] "Blue"   "Green"  "Green"  "Yellow" "Yellow"

数据。

color <- scan(what = character(), text = "
Red001(dot)jpeg
Red002(dot)jpeg
Red003(dot)jpeg
Red004(dot)jpeg
Red999(dot)jpeg
Blue001(dot)jpeg
Blue999(dot)jpeg
Green001(dot)jpeg
Green999(dot)jpeg
Yellow001(dot)jpeg
Yellow999(dot)jpeg
")

答案 1 :(得分:2)

我们可以使用正则表达式。

dat$V1 <- sub("[0-9]{3}\\.jpeg$", "", dat$V1)

数据

dat <- read.table(text = "Red001.jpeg
Red002.jpeg
                  Red003.jpeg
                  Red004.jpeg
                  Red999.jpeg
                  Blue001.jpeg
                  Blue999.jpeg
                  Green001.jpeg
                  Green999.jpeg
                  Yellow001.jpeg
                  Yellow999.jpeg",
                  header = FALSE, stringsAsFactors = FALSE)

答案 2 :(得分:2)

看起来模式是[colour][3 digits][dot][jpeg]。然后我们可以不带正则表达式使用 substring

substring(dat$V1, first = 1, last = nchar(dat$V1) - 8)

# [1] "Red"    "Red"    "Red"    "Red"    "Red"    "Blue"   "Blue"   "Green" 
# [9] "Green"  "Yellow" "Yellow"

或者有趣的解决方案,看起来每种颜色都重复了999次:

rep(c("Red", "Green", "Blue", "Yellow"), rep(999, 4))