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

Я хочу добавить маркеры в строку на основе позиций маркера из другой строки. У меня есть фрейм данных SOURCE с двумя столбцами: "ortho" и "syllabify". Я хочу создать столбец TARGET, используя маркеры подчеркивания. Строки из «ortho» должны быть отделены «подчеркиванием» в соответствии с положением «подчеркивания» в «sillabify».

df <- data.frame ("agradece", "R_OOR_OR_OR") </p>

SOURCE:  
   ortho    syllabify       
agradeço  R_OOR_OR_OR  
    bala        OR_OR        
 futebol    OR_OR_ORC    

TARGET:  
   ortho    syllabify       TARGET
agradeço  R_OOR_OR_OR  a_gra_de_ço    
    bala        OR_OR        ba_la
 futebol    OR_OR_ORC    fu_te_bol

Спасибо всем!

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вот одно из решений:

df <- read.table(text = "   ortho    syllabify       
agradeço  R_OOR_OR_OR  
    bala        OR_OR        
 futebol    OR_OR_ORC", header = TRUE)

library(purrr)
df <- within(df, {
  ortho <- as.character(ortho)

  underscore_loc <- gregexpr("_", syllabify)
  target <- map2(ortho, underscore_loc, function(string, loc) {
    locs <- cbind(c(1, loc) - pmax(0, 1 + 0:length(loc) - 2), c(loc, nchar(string)) - c(1:length(loc), 0))
    strings <- apply(locs, 1, function(x) substr(string, x[1], x[2]))
    paste(strings, collapse = "_")
  })
  rm(underscore_loc)
})
df
#>      ortho   syllabify      target
#> 1 agradeço R_OOR_OR_OR a_gra_de_ço
#> 2     bala       OR_OR       ba_la
#> 3  futebol   OR_OR_ORC   fu_te_bol

Создано в 2018-06-26 пакетом Представ (v0.2.0).

Пакет purrr используется для получения функции map2 - которая похожа на lapply, но работает для ввода по 2 спискам.

0 голосов
/ 27 июня 2018

Я не знаю, на каком языке вы думаете (Густаво, Мелиссо), но вот на Java это ответ:

Инициализаторы:

String sillabify = "OR_OR_ORC";
String ortho = "futebol";
String answer = returnTheTARGETColumnStringUsingTheUnderlineMarkers(ortho, sillabify);

Метод:

public String returnTheTARGETColumnStringUsingTheUnderlineMarkers(String pOrtho, String pSillabify) {
    String target = "";

    int ind = 0;
    while (pSillabify.contains("_")) {
        target = target + pOrtho.substring(0, pSillabify.indexOf("_")) + "_";
        pOrtho = pOrtho.substring(pSillabify.indexOf("_"), pOrtho.length());
        pSillabify = pSillabify.substring(pSillabify.indexOf("_") + 1, pSillabify.length());
    }

    target = target + pOrtho;

    return target;
}

Возвращает "fu_te_bol".

...