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

R语言数据转换:基于不同列数值生成新行的实现方法

R数据框按计数展开为逐行评分记录解决方案

方法1:tidyverse 实现(简洁易读)

搭配tidyr的pivot_longer和uncount函数即可实现需求,uncount专门用于按计数列重复生成对应行数:

# 加载依赖包
library(tidyr)
library(dplyr)

# 构造原始数据
item <- c('A','B','C')
one <- c(2, 1, 2)
two <- c(1,1,2)
data <- data.frame(item,one,two)

# 转换逻辑
result <- data %>%
  # 宽表转长表,拆分评分类型和对应计数
  pivot_longer(cols = c(one, two),
               names_to = "rating",
               values_to = "count") %>%
  # 将评分标识转为对应数值
  mutate(rating = ifelse(rating == "one", 1, 2)) %>%
  # 按计数值重复行数,自动删除计数列
  uncount(count)

方法2:base R 实现(无需安装额外包)

直接使用基础函数rep和mapply完成转换:

# 构造原始数据
item <- c('A','B','C')
one <- c(2, 1, 2)
two <- c(1,1,2)
data <- data.frame(item,one,two)

# 逐列构造结果
item_col <- rep(data$item, rowSums(data[,c("one", "two")]))
rating_col <- unlist(mapply(function(o, t) rep(c(1,2), c(o,t)), data$one, data$two))
result <- data.frame(item = item_col, rating = rating_col)

两种方法输出的结果均与期望格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:06:06