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

如何对长数据进行Pivot转换,同时不重复保留前若干行?

R语言数据框结构转换实现

原始数据框

df <- data.frame(col1=c(NA,NA,NA,NA, 'A', 'B'), col2=c('year1', 'year2', 'year3', 'year4', 10,20))

目标结构

df <- data.frame(col1=c( 'A',  'B'),
                  col2=c( 'year1', 'year1'), 
                  col3=c( 'year2', 'year2'),
                  col4=c( 'year3', 'year3'), 
                  col5=c( 'year4', 'year4'), 
                  col6=c( 10, 20))

实现方案

核心思路是拆分原始数据中的年份标识与实际数据,将年份转为列并重复匹配实际数据行数,最终合并成目标结构。以下提供两种实现方式:

方式一:Base R 实现

# 提取前4行的年份值
year_values <- df$col2[1:4]
# 提取后2行的实际数据
core_data <- df[5:6, ]
# 生成年份对应的列,每个年份重复2次匹配两行数据
year_columns <- as.data.frame(matrix(rep(year_values, each = 2), nrow = 2))
# 给年份列命名
colnames(year_columns) <- paste0("col", 2:5)
# 合并所有列得到结果
final_df <- cbind(
  col1 = core_data$col1,
  year_columns,
  col6 = core_data$col2
)

方式二:Tidyverse 实现

library(tidyverse)

# 提取年份值
year_values <- df$col2[1:4]

final_df <- df[5:6, ] %>%
  select(col1) %>%
  mutate(
    col2 = year_values[1],
    col3 = year_values[2],
    col4 = year_values[3],
    col5 = year_values[4],
    col6 = df$col2[5:6]
  )

运行任意一种方式后,final_df 即为目标结构的数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:07:33