Разбить символьную строку и преобразовать в data.frame / tibble в R? - PullRequest
0 голосов
/ 19 октября 2018

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

library(tidyverse)
library(stringr)

data <- tibble(cats = c("a", "a|b |c", " b", "b| c"))

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

Это то, что я хочу сделать, но это не работает:

data %>%
 str_split(cats, "\\|") %>%
 unnest() %>%
 str_trim(cats) %>%
 count(cats)

Насколько я понимаю из чтения сообщений об ошибках, это проблематично, поскольку str_split создает список списков.а не новый data.frame / tibble.

Итак, я сделал это, и я получил желаемый результат:

data <- tibble(cats = str_split(data$cats, "\\|"))  %>%
 unnest()

data <- tibble(cats = str_trim(data$cats)) %>%
 count(cats)

data

# A tibble: 3 x 2
  cats      n
  <chr> <int>
1 a         2
2 b         3
3 c         2

На данный момент я готов двигатьсяна, но я хотел бы получить некоторое представление о том, что я делаю неправильно в трубе.

1 Ответ

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

Вы должны просто иметь возможность поместить свои функции str_split и str_trim в аргумент mutate следующим образом:

data <- data %>% 
  mutate(cats = str_split(cats, "\\|")) %>% 
  unnest() %>% 
  mutate(cats = str_trim(cats))

data <- data %>% group_by(cats) %>% summarize(n = n())

data

# A tibble: 3 x 2
  cats      n
  <chr> <int>
1 a         2
2 b         3
3 c         2
...