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

在R语言中使用pivot_wider实现样本为列、测试项为行的数据转置

解决方法

你需要先将数据集转换为长格式,再进行宽格式重构,才能得到行名为测试项、列名为样本的目标结构。

错误原因分析

你之前的pivot_wider(names_from = sample, values_from = 2:4)会把test_1/test_2/test_3三列分别与每个样本组合,生成test_1_A这类复合列名,这和你想要的结构不符。

正确的tidyverse实现代码

library(tidyverse)

# 原始数据集
df <- data.frame(sample=c('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'),
                 test_1=c(2, 1, 4, 3, 5, 2, 1, 4),
                 test_2=c(8, 3, 9, 6, 8, 10, 7, 7),
                 test_3=c(4, 3, 4, 5, 3, 4, 5, 4))

# 第一步:转成长格式,提取测试项和对应数值
df_long <- df %>%
  pivot_longer(cols = starts_with("test_"), 
               names_to = "test_item", 
               values_to = "value")

# 第二步:重构为目标宽格式
df_wide <- df_long %>%
  pivot_wider(names_from = sample, 
              values_from = value)

# 查看结果
df_wide

运行结果

# A tibble: 3 × 9
  test_item     A     B     C     D     E     F     G     H
  <chr>     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 test_1        2     1     4     3     5     2     1     4
2 test_2        8     3     9     6     8    10     7     7
3 test_3        4     3     4     5     3     4     5     4

可选:基础R转置方法

如果你不想使用tidyverse,也可以用基础R的转置函数t(),只需调整行名列名即可:

# 转置(先排除sample列)
df_transposed <- t(df[, -1])
# 设置列名为样本名
colnames(df_transposed) <- df$sample
# 转换为数据框并保留行名
df_transposed <- as.data.frame(df_transposed)

df_transposed

运行后结果:

A B C D E  F G H
test_1  2 1 4 3 5  2 1 4
test_2  8 3 9 6 8 10 7 7
test_3  4 3 4 5 3  4 5 4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:37:06