Разделить длинную строку на несколько столбцов фрейма данных, не разбивая слово - PullRequest
0 голосов
/ 17 июня 2020

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

temp_df <- data.frame(
  long_string_column = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Whatever ornare nunc tellus, nec convallis enim viverra sit amet."
)


library(tidyr)
temp_df_new <- separate(temp_df, 
         long_string_column, 
         into = c("split1", "split2", "split3", "split4", "split5"), 
         sep = c(40, 80, 120, 160),
         remove = FALSE) 

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

enter image description here

Есть ли способ гарантировать, что разделения слов не произойдет?

1 Ответ

1 голос
/ 17 июня 2020

Вы можете использовать str_wrap() и разделять символы новой строки. Это позволит избежать разбивки слов и приведет к тому, что в каждом новом столбце будет <= 40 символов (хотя могут быть исключения в зависимости от характера исходных строк). </p>

library(stringr)
library(dplyr)
library(tidyr)

temp_df <- temp_df %>%
  mutate(tmp = str_wrap(long_string_column, 40))

cols <- seq(max(str_count(temp_df$tmp, "\n") + 1))

temp_df %>%
  separate(tmp, 
           into = paste0("split_", cols), 
           sep = "\n",
           remove = FALSE) %>%
  select(-tmp)
...