You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中将固定行数的行转列:亚马逊食品评分数据处理

解决亚马逊食品评分数据的格式转换问题

嘿,我来帮你搞定这个数据格式转换的事儿!你的数据框每6行对应一条完整的用户评分信息,现在要把它转成一行6列的宽格式,这样后续筛选操作就方便多了,具体步骤如下:

1. 给每条完整评论生成分组ID

首先我们需要把每6行归为一组,用rep()函数生成分组标识,这样后续才能把同一组的行合并成一行:

# 为每6行生成一个分组ID
food_ratings$group_id <- rep(seq_len(nrow(food_ratings) %/% 6), each = 6)

# 处理总行数不是6的倍数的情况(如果有的话),把剩余行归到最后一组
if (nrow(food_ratings) %% 6 != 0) {
  remaining_rows <- nrow(food_ratings) %% 6
  food_ratings$group_id <- c(food_ratings$group_id, rep(max(food_ratings$group_id) + 1, remaining_rows))
}

2. 拆分字段名和对应值

你的数据列内容是「字段名: 值」的格式,我们需要把它们拆分成单独的字段列和值列:

# 拆分每行的字段和值,用": "作为分隔符
split_content <- strsplit(food_ratings[[1]], ": ", fixed = TRUE)

# 提取字段名和对应值,分别存入新列
food_ratings$field <- sapply(split_content, `[`, 1)
food_ratings$value <- sapply(split_content, `[`, 2)

这里用fixed=TRUE是为了避免把冒号当成正则表达式的特殊字符,确保拆分准确。

3. 转换为宽格式数据

用tidyr包的pivot_wider()函数(老版本R可以用spread())把长格式数据转成宽格式,每组变成一行,每个字段对应一列:

# 如果还没安装tidyr包,先执行安装
# install.packages("tidyr")
library(tidyr)

# 转换为宽格式
wide_food_ratings <- pivot_wider(
  data = food_ratings,
  id_cols = group_id,
  names_from = field,
  values_from = value
)

4. 后续筛选操作示例

转换完成后,你就可以轻松按评分筛选摘要了,比如提取所有5星评分的评论摘要:

# 筛选评分5.0的评论摘要
five_star_summaries <- wide_food_ratings[wide_food_ratings$`review/score` == "5.0", "review/summary"]

如果遇到个别行格式不一致的情况,可以先检查拆分后的field列有没有异常值,再针对性调整拆分逻辑就好啦!

内容的提问来源于stack exchange,提问作者the_stubborn_learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:20:13