Как добавить новый столбец на основе строк с шаблоном и последовательностью в R? - PullRequest
0 голосов
/ 16 октября 2018

Если есть фрейм данных со столбцом с шаблоном, который представляет собой: строку со строкой с именем, за которой следуют другие строки, содержащие имена и последовательность чисел.Это повторяется по всему фрейму данных.

Я хочу создать новую базу столбцов при условии, что если она найдет строку со строкой, начинающейся со слова «CANTON» (и без номера), скопируйтестрока без первого слова (CANTON) проходит через все последующие строки нового столбца, пока не появится другая строка со строкой, которая начинается со слова «CANTON», где она должна взять новую строку и скопировать новое последнее слово вновый столбец.

Примером кадра данных является следующий:

datos <- data.frame(sitio = c("CANTON SAN JOSE", "01 Carmen", "02 Merced", 
      "03 Hospital", "04 Catedral", "05 San Franscisco", 
      "CANTON ESCAZU", "01 Escazu", "02 San Antonio", "03 San Rafael" ),
      area = c(44.62, 1.49, 2.29, 3.38, 2.31, 2.85, 34.49, 4.38,
               16.99, 13.22))
datos

И ожидаемый результат будет:

expected_result <-data.frame(
      sitio = c("CANTON SAN JOSE", "01 Carmen", "02 Merced",
                "03 Hospital", "04 Catedral", "05 San Franscisco", 
                "CANTON ESCAZU", "01 Escazu", "02 San Antonio", 
                "03 San Rafael" ),
      area = c(44.62, 1.49, 2.29, 3.38, 2.31, 2.85, 34.49, 4.38,
               16.99, 13.22),
      canton = c("SAN JOSE", "SAN JOSE", "SAN JOSE", "SAN JOSE", 
                 "SAN JOSE", "SAN JOSE", "ESCAZU", "ESCAZU", "ESCAZU",
                 "ESCAZU"))

Я пытался сделатьмногие для циклов, подмножеств и объединения фреймов данных без успеха.Я не могу прояснить этот шаблон в инструкции в R.

Спасибо за помощь!

1 Ответ

0 голосов
/ 16 октября 2018

Надеюсь, это работает для вас данные:

x <- gsub('^CANTON ', '', datos$sitio)
x[!grepl('^CANTON ', datos$sitio)] <- NA
datos$canton <- ave(x, cumsum(!is.na(x)), FUN = function(xx) xx[1])

# > datos
#                sitio  area   canton
# 1    CANTON SAN JOSE 44.62 SAN JOSE
# 2          01 Carmen  1.49 SAN JOSE
# 3          02 Merced  2.29 SAN JOSE
# 4        03 Hospital  3.38 SAN JOSE
# 5        04 Catedral  2.31 SAN JOSE
# 6  05 San Franscisco  2.85 SAN JOSE
# 7      CANTON ESCAZU 34.49   ESCAZU
# 8          01 Escazu  4.38   ESCAZU
# 9     02 San Antonio 16.99   ESCAZU
# 10     03 San Rafael 13.22   ESCAZU
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...