R 将字符串列表拆分为单独的行

R 将字符串列表拆分为单独的行,r,tidyr,R,Tidyr,我有一个包含两列的食谱数据框架:一个按以下方式格式化的成分列表: 成分-----------------平均评价 鸡蛋、面粉、糖 我试图解包“配料”列,并为每个配料字符串指定一行,结果如下所示: 成分:-----平均评价: “鸡蛋”---4.7 “面粉”---4.7 “糖”---4.7 这样做的目的是在完成这项工作后汇总数据,并对含有每种成分的配方进行平均审查。有什么建议吗?如果它是一个字符串,一个选项是用str\u remove\u all删除方括号,然后使用分隔行在处拆分“成分”,展开行 l

我有一个包含两列的食谱数据框架:一个按以下方式格式化的成分列表:

成分-----------------平均评价

鸡蛋、面粉、糖

我试图解包“配料”列,并为每个配料字符串指定一行,结果如下所示:

成分:-----平均评价:

“鸡蛋”---4.7

“面粉”---4.7

“糖”---4.7


这样做的目的是在完成这项工作后汇总数据,并对含有每种成分的配方进行平均审查。有什么建议吗?

如果它是一个字符串,一个选项是用
str\u remove\u all
删除方括号,然后使用
分隔行
处拆分“成分”,
展开行

library(stringr)
library(dplyr)
library(tidyr)
df1 %>%
    mutate(Ingredient = str_remove_all(Ingredient, "\\[|\\]|'")) %>%
    separate_rows(Ingredient, sep=",\\s*")
#   Ingredient AverageReview
#1       eggs           4.7
#2      flour           4.7
#3      sugar           4.7

或者另一种选择是将单词提取到
列表中
,然后执行
unest

df1 %>% 
    mutate(Ingredient = str_extract_all(Ingredient, "[[:alpha:]]+")) %>%
    unnest(c(Ingredient))
# A tibble: 3 x 2
#  Ingredient AverageReview
#  <chr>              <dbl>
#1 eggs                 4.7
#2 flour                4.7
#3 sugar                4.7
数据
df1
lst1 <- regmatches(df1$Ingredient, gregexpr("[[:alpha:]]+", df1$Ingredient))
data.frame(Ingredient = unlist(lst1), AverageReview = rep(df1$AverageReview,, lengths(lst1)))
#  Ingredient AverageReview
#1       eggs           4.7
#2      flour           4.7
#3      sugar           4.7
 df1 <- data.frame(Ingredient = "['eggs', 'flour', 'sugar']",
                   AverageReview = 4.7, stringsAsFactors = FALSE)