Разбить строку на строки и столбцы - PullRequest
1 голос
/ 17 апреля 2020

У меня есть одна длинная огромная строка:

mystr <- "foo   one   undefined + foo   two   undefined + BAR   three   undefined + "

И я хочу превратить ее в

   x1    x2        x3
1 foo   one undefined
2 foo   two undefined
3 bar three undefined

Используя + для создания новых строк, затем пробелы для создания колонны. Это возможно? Я пытался использовать str_split и mutate, но я не мог понять, как создавать новые строки. Любая помощь приветствуется!

Ответы [ 2 ]

3 голосов
/ 17 апреля 2020

Мы можем использовать read.table после замены + на \n, используя gsub in base R

read.table(text = gsub("+", "\n", mystr, fixed = TRUE),
       header = FALSE, col.names = paste0('x', 1:3))
#    x1    x2        x3
#1 foo   one undefined
#2 foo   two undefined
#3 BAR three undefined

Или используя strsplit с read.table

read.table(text = strsplit(mystr, " + ", fixed = TRUE)[[1]], header = FALSE)

Или мы можем использовать fread

library(data.table)
fread(text = gsub("+", "\n", mystr, fixed = TRUE), header = FALSE)

Или используя tidyverse

library(dplyr)
library(tidyr)
tibble(col1 = mystr) %>% 
   separate_rows(col1, sep="\\s*\\+\\s*") %>%
   separate(col1, into = c('x1', 'x2', 'x3')) %>%
   na.omit
# A tibble: 3 x 3
#  x1    x2    x3       
#  <chr> <chr> <chr>    
#1 foo   one   undefined
#2 foo   two   undefined
#3 BAR   three undefined
1 голос
/ 17 апреля 2020

Другое решение Base R:

data.frame(do.call("rbind", sapply(strsplit(trimws(mystr, "both"), "\\+"), 
        function(x){strsplit(trimws(x, "both"), "\\s+")})))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...