在我的数据框中,我有一列名为“颜色”。 “颜色”列中的数据如下所示:
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
。同样,我也需要使用Blue
,Green
和Yellow
来执行此操作。如何使该过程自动化?
答案 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))