r - 将字符串列表分成单独的行
问题描述
我有一个包含两列的食谱数据框:以这种方式格式化的成分列表:
成分----------------------平均评论
['鸡蛋','面粉','糖']--------4.7
我正在尝试解压缩成分列并为每个单独的成分字符串提供一行,结果如下所示:
成分:--------平均评论:
'鸡蛋'-------------4.7
'面粉'-------------4.7
'糖'-----------4.7
我们的想法是在完成此操作后汇总数据,并对包含每种成分的食谱进行平均审查。有什么建议吗?
解决方案
如果它是一个字符串,一个选项是用 删除方括号str_remove_all
,然后使用separate_rows
在 'Ingredient' 处拆分,
以扩展行
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
或者另一种选择是将单词提取到 alist
然后执行unnest
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
或者在base R
withregmatches/gregexpr
中将单词提取到 a 中list
,然后构造 'data.frame'
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)
推荐阅读
- c++ - 错误:没有运算符“==”与这些操作数匹配
- r - 在 x 轴上创建具有多个变量的条形图
- reactjs - 如何将 mongodb json 带到烧瓶中做出反应?
- amazon-web-services - 适用于 AWS Appflow 的 Amazon VPC 终端节点
- openstreetmap - 使用 osmnx 查找 OSM 边缘随时间的变化?
- javascript - 使用 JQuery/Ajax 解析 JSON 的问题
- php - 如何在 Laravel 中使用正则表达式的多个验证规则?
- arrays - 在 SwiftUI 中显示嵌套数组中的项目
- c - 我有一张表,但现在我无法比较该值并将其替换为正确的矩阵位置
- java - 球到矩形碰撞