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

拆分字符串并在R中转换为data.frame/tibble?,r,list,stringr,R,List,Stringr,我有如下数据: library(tidyverse) library(stringr) data <- tibble(cats = c("a", "a|b |c", " b", "b| c")) 我从阅读错误消息中了解到,这是有问题的,因为str_split正在创建列表列表,而不是新的data.frame/tibble 所以,我做了这个,得到了我想要的结果: data <- tibble(cats = str_split(data$cats, "\\|")) %>% u

我有如下数据:

library(tidyverse)
library(stringr)

data <- tibble(cats = c("a", "a|b |c", " b", "b| c"))
我从阅读错误消息中了解到,这是有问题的,因为
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
数据%
unnest()
数据%
计数(猫)
数据
#一个tibble:3x2
猫
1 a 2
2 b 3
3 c 2

现在,我已经准备好继续,但我想知道我在管道中做了什么错误。

您应该能够将
stru-split
stru-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
数据%
突变(猫=str\U分裂(猫,“\\\\\”)%%
unest()%>%
突变(猫=str_修剪(猫))
数据%group\U by(cats)%>%SUMMARY(n=n())
数据
#一个tibble:3x2
猫
1 a 2
2 b 3
3 c 2

stru split
的第一个参数应该是向量。例如,从
data%%>%pull(cats)%%>%str\u split(,“\\\\\”)%%>%…
开始。@markus,当使用此代码
data%%>%pull(cats)%%>%str\u split(,“\\\\\\”)%%unest()%%>%str trim(cats)%%>%count count(cats)
时,我得到这个错误:
UseMethod中的错误(“unest”):没有适用于应用于类“list”调用的对象的“unnest”的方法:%%>%。。。freduce->->->unnest->unnest.default->unnest执行暂停
Try
data%%>%pull(cats)%%>%str\u split(,“\\\\\”)%%>%unlist()%%>%str\u trim(.)>%table()%%>%as\u data\u frame()%%>%setNames(,,c(“col1”,“col2”)
。但与@benc的答案相比,这并不复杂。
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