Как установить значения строк по метке в одном столбце в R? - PullRequest
1 голос
/ 04 марта 2020

У меня есть столбец, в который я хотел бы поместить значение строки на основе первой и последней метки 'string' в R. Значения уровня следующие:

[1] "60022 (Location; 9TH FLOOR; Snacks)"
[3] "60024 (Location; 9TH FLOOR; Lg Snacks)"
[5] "60027 (Location; 9TH FLOOR; Sml Snacks)"

Я бы хотел, чтобы потяните # и последнюю строку, разделенную ';'. Есть ли функция или синтаксис в R для этого? Так что удалите «Местоположение; 9-й ЭТАЖ» и просто оставьте последний; "" string.

Я пытался получить это только первое значение, но не могу сохранить "закуски", а также с этим кодом:

#updated_df_2020$Machine <- sub("([A-Za-z]+).*", "\\1", updated_df_2020$Machine) 

Конечный результат для каждой строки должен быть числом (60022, а затем и закусками) примерно так:

[1] "60022 (Snacks)" 
[1] "60024 (Lg Snacks)" 
[1] "60027 (Sml Snacks)" 

Ответы [ 3 ]

1 голос
/ 04 марта 2020

Вы могли бы сделать

> a <- c("60022 (Location; 9TH FLOOR; Snacks)", "60024 (Location; 9TH FLOOR; Snacks)", "60027 (Location; 9TH FLOOR; Snacks)")
> strs <- strsplit(a, split = " ")
> sapply(strs, function(s) paste(s[1], paste0("(", s[length(s)])))
#
# "60022 (Snacks)" "60024 (Snacks)" "60027 (Snacks)"
#

, что уродливее, но я думаю, что немного легче понять

1 голос
/ 04 марта 2020

Если нам нужно удалить подстроку, запишите цифры (\\d+) в начале (^) строки, а затем запишите непробельный пробел (\\S), который следует за ;, и ноль или более пробелов (\\s*) и других символов, следующих за (.*) до ) в конце ($) в качестве второй группы захвата. В замене укажите обратную ссылку (\\1, \\2) захваченной группы и измените ее, добавив (

updated_df_2020$Machine <- sub("^(\\d+)\\b.*;\\s*\\b(\\S.*\\))$", 
        "\\1 (\\2", updated_df_2020$Machine)
updated_df_2020$Machine
#[1] "60022 (Snacks)"     "60024 (Lg Snacks)"  "60027 (Sml Snacks)"

Если начало строки не является ди git и все еще хочет получить извлечение, замените ((\\d+)) на (\\w+)

data

updated_df_2020 <- data.frame(Machine = c("60022 (Location; 9TH FLOOR; Snacks)",
   "60024 (Location; 9TH FLOOR; Lg Snacks)", "60027 (Location; 9TH FLOOR; Sml Snacks)"),
   stringsAsFactors = FALSE)
0 голосов
/ 04 марта 2020

Мы можем извлечь число в начале и все, после чего следует двоеточие, используя sub:

sub("(\\d+).*;(.*)", "\\1 (\\2", x)
#[1] "60022 ( Snacks)"     "60024 ( Lg Snacks)"  "60027 ( Sml Snacks)"

, где x -

x <- c("60022 (Location; 9TH FLOOR; Snacks)", 
       "60024 (Location; 9TH FLOOR; Lg Snacks)",
       "60027 (Location; 9TH FLOOR; Sml Snacks)")
...