В столбце, как я могу перекодировать данные в последовательности? - PullRequest
0 голосов
/ 17 января 2019

В моем фрейме данных у меня есть столбец с именем «Цвета». Данные в столбце «Цвета» выглядят так:

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. Как я могу автоматизировать этот процесс?

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Простое регулярное выражение сделает это.

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
")
0 голосов
/ 17 января 2019

Похоже, что шаблон [colour][3 digits][dot][jpeg]. Тогда мы можем использовать подстрока без регулярного выражения:

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))
0 голосов
/ 17 января 2019

Мы можем использовать регулярное выражение.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...