Как повторить объединение строк на букву в строке букв без пробелов или с тире? - PullRequest
0 голосов
/ 26 ноября 2018

Ниже приведена упрощенная, хотя и репрезентативная версия кадра данных, с которым я работаю.

df <- rbind( data.frame(masterConfig = rep("ABC", 5), subConfig = rep("xyz", 5)),
            data.frame(masterConfig = rep("BFG", 5), subConfig = rep("i-k", 5)) )

Я пытаюсь создать третий столбец в указанном кадре данных, который будет выглядеть следующим образом для первых пяти и последнихпять строк соответственно:

"ABC x, ABC y, ABC z"

"BFG i, BFG j, BFG k"

Я ценю помощь!

1 Ответ

0 голосов
/ 26 ноября 2018

Мы можем написать функцию, которая проверяет наличие if "-" в столбце subConfig, затем разделяет его и создает диапазон букв между ними или else просто разделяет его на каждый символ.

get_broken_letters <- function(x) {
   if (grepl("-", x)) {
     indx <- which(letters %in% strsplit(x, "-")[[1]])
     letters[indx[1]:indx[2]]
   }
   else {
     strsplit(x, "")[[1]]
   }
}

и затем для каждой строки мы применяем функцию, используя sapply и paste их с masterConfig столбец

df$new_column <- sapply(1:nrow(df), function(x) 
      paste(df$masterConfig[x],get_broken_letters(df$subConfig[x]), collapse = " "))

df
#   masterConfig subConfig        new_column
#1           ABC       xyz ABC x ABC y ABC z
#2           ABC       xyz ABC x ABC y ABC z
#3           ABC       xyz ABC x ABC y ABC z
#4           ABC       xyz ABC x ABC y ABC z
#5           ABC       xyz ABC x ABC y ABC z
#6           BFG       i-k BFG i BFG j BFG k
#7           BFG       i-k BFG i BFG j BFG k
#8           BFG       i-k BFG i BFG j BFG k
#9           BFG       i-k BFG i BFG j BFG k
#10          BFG       i-k BFG i BFG j BFG k

данные

df <- data.frame(masterConfig = c(rep("ABC", 5), rep("BFG", 5)), 
       subConfig = c(rep("xyz", 5), rep("i-k", 5)), stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...