Код для поиска шаблона и печати его в виде столбца в следующих строках, пока шаблон не появится снова - PullRequest
1 голос
/ 14 апреля 2020

Я был невежествен и мне нужна помощь. У меня есть фрейм данных, в котором я хочу найти шаблон, начинающийся с гипона "-", и печатать его в виде столбца, пока шаблон не появится снова. См. Пример ниже:

кадр входных данных:

--ABC
    1   John
    2   Jerry
    3   Tom
--DEF
    1   Harry
    2   Garry
    3   Glenn
    4   Vlad
--GHI
    1   Frank
    2   Harvey
    3   Adam

кадр выходных данных:

--ABC 1   John
--ABC 2   Jerry
--ABC 3   Tom
--DEF 1   Harry
--DEF 2   Garry
--DEF 3   Glenn
--DEF 4   Vlad
--GHI 1   Frank
--GHI 2   Harvey
--GHI 3   Adam

Данные как dput

input <- structure(list(V1 = structure(c(1L, 4L, 5L, 6L, 2L, 4L, 5L, 6L, 7L, 3L, 4L, 5L, 6L), .Label = c("--ABC", "--DEF", "--GHI", "1", "2", "3", "4"), class = "factor"), V2 = structure(c(1L, 9L, 8L, 10L, 1L, 6L, 4L, 5L, 11L, 1L, 3L, 7L, 2L), .Label = c("", "Adam", "Frank", "Garry", "Glenn", "Harry", "Harvey", "Jerry", "John", "Tom", "Vlad"), class = "factor")), class = "data.frame", row.names = c(NA, -13L))

Шаблон, который я ищу, начинается с гипона, за которым следуют символы. Может ли кто-нибудь помочь мне в этом отношении.

1 Ответ

1 голос
/ 14 апреля 2020

Мы можем создать новый столбец, используя данные из V1, где присутствует '--'. Мы можем заменить NA s предыдущим значением, отличным от NA, используя fill и удалить строки, которые имеют '--' in V1.

library(dplyr)

input %>%
  mutate(V3 = replace(V1, !grepl('--[A-Z]+', V1), NA)) %>%
  tidyr::fill(V3) %>%
  filter(!grepl('--[A-Z]+', V1))


#   V1     V2    V3
#1   1   John --ABC
#2   2  Jerry --ABC
#3   3    Tom --ABC
#4   1  Harry --DEF
#5   2  Garry --DEF
#6   3  Glenn --DEF
#7   4   Vlad --DEF
#8   1  Frank --GHI
#9   2 Harvey --GHI
#10  3   Adam --GHI
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...