拆分一个字符串并转换为R中的data.frame / tibble?

时间:2018-10-19 17:31:44

标签: r list stringr

我有如下数据:

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 :(得分:1)

您应该只可以将str_splitstr_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