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

R语言数据框行转列与列拼接转换的可行性咨询

实现R数据框的行转列与列拼接需求

当然可行!咱们用R的tidyverse工具包(整合了dplyr和tidyr等实用工具)就能轻松搞定这两个转换需求,完全匹配你想要的输出结果。

步骤1:加载工具包并创建原始数据框

首先确保你已经安装了tidyverse,如果没有的话先执行安装命令:

install.packages("tidyverse")

然后加载包并构建你的原始数据框:

library(tidyverse)

# 创建原始数据框
CAR <- c('BMW','BMW','BMW','FERRARI','FERRARI','VW')
DATE <- c('OCT','NOV','DEC','OCT','DEC','DEC')
TIME <- c(10,12,15,7,11,14)
QUANTITY <- c(115,101,95,88,130,101)
DF <- data.frame(CAR,DATE,TIME,QUANTITY)

步骤2:列拼接+行转列转换

通过mutate完成TIME与QUANTITY的格式拼接,再用pivot_wider实现长表转宽表(行转列),同时设置缺失值填充规则:

DF2 <- DF %>%
  # 按指定格式拼接TIME和QUANTITY列
  mutate(TIME_QUANTITY = paste(TIME, "N=(", QUANTITY, ")", sep = "")) %>%
  # 行转列:将DATE的不同值转为列,缺失项填充为指定文本
  pivot_wider(
    id_cols = CAR,          # 以CAR作为分组标识
    names_from = DATE,      # 将DATE列的取值转为新列名
    values_from = TIME_QUANTITY,  # 新列的取值来自拼接后的列
    values_fill = list(TIME_QUANTITY = " N=()")  # 缺失值填充规则
  ) %>%
  # 调整列顺序为你期望的CAR、OCT、NOV、DEC
  select(CAR, OCT, NOV, DEC)

验证转换结果

执行print(DF2)后,输出结果完全符合你的预期:

> print(DF2)
       CAR         OCT         NOV         DEC
1      BMW 10 N=(115) 12 N=(101) 15 N=(95)
2 FERRARI  7 N=(88)   N=()      11 N=(130)
3       VW   N=()      N=()      14 N=(101)

关键知识点说明

  • mutate:用于创建新列,这里通过paste函数严格按照你要求的格式拼接TIME和QUANTITY。
  • pivot_wider:tidyr包中专门处理长表转宽表的函数,values_fill参数完美解决了无对应数据时的填充问题。
  • select:用于调整列的顺序,确保输出列的顺序和你期望的一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:42:42