我有如下数据:
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
在这一点上,我准备继续前进,但是我想了解一下我在管道中对此做错了什么。
答案 0 :(得分:1)
您应该只可以将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