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

如何转置R语言DataFrame:将Tempo设为列名、sig_C系列设为group变量

解决方案

在R中实现这种数据重塑需求,不能用基础的t()函数(它仅做简单行列互换,无法保留分组逻辑),推荐使用tidyverse包中的pivot_longer()和pivot_wider()组合完成:

步骤1:加载所需包并定义原始数据

library(tidyverse)

# 你的原始数据
df <- structure(list(Tempo = c("t0", "t1", "REC1", "REC2", "REC4", 
"REC8", "REC11"), sig_C = c("a", "a", "a", "a", "a", "a", "a"
), sig_C1 = c("a", "a", "a", "a", "a", "a", "a"), sig_C2 = c("a", 
"a", "a", "a", "a", "a", "a"), sig_C3 = c("a", "a", "a", "a", 
"a", "a", "a"), sig_C4 = c("a", "a", "a", "a", "a", "a", "a"), 
    sig_C5 = c("a", "b", "b", "ab", "ab", "ab", "a")), row.names = c(NA, 
-7L), class = c("tbl_df", "tbl", "data.frame"))

步骤2:执行数据重塑

result <- df %>%
  # 先将sig_C到sig_C5列转为长格式,生成group和value列
  pivot_longer(cols = starts_with("sig_"), 
               names_to = "group", 
               values_to = "value") %>%
  # 再将Tempo的取值转为列名,value对应每个group的各Tempo值
  pivot_wider(names_from = Tempo, 
              values_from = value)

最终结果预览

运行后得到的result结构如下:

# A tibble: 6 × 8
  group   t0    t1    REC1  REC2  REC4  REC8  REC11
  <chr>   <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 sig_C   a     a     a     a     a     a     a    
2 sig_C1  a     a     a     a     a     a     a    
3 sig_C2  a     a     a     a     a     a     a    
4 sig_C3  a     a     a     a     a     a     a    
5 sig_C4  a     a     a     a     a     a     a    
6 sig_C5  a     b     b     ab    ab    ab    a    

关键逻辑说明

  • pivot_longer():把宽格式的sig_C至sig_C5列"拉长",将列名存入group变量,对应的值存入value变量,得到每行对应一个group+Tempo的组合。
  • pivot_wider():将长格式数据重新"拉宽",把Tempo的每个取值作为新列名,value的值填充到对应位置,最终得到你需要的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:55:23