如何在R Studio中按需求转置Dataframe数据?
解决方案
假设你的原始数据结构如下(对应你提供的示例左侧):
| Test | A | B | C |
|---|---|---|---|
| Test1 | 1 | 2 | 3 |
| Test2 | 4 | 5 | 6 |
目标格式为(对应示例右侧):
| Category | Test1 | Test2 |
|---|---|---|
| A | 1 | 4 |
| B | 2 | 5 |
| C | 3 | 6 |
以下是两种可行的实现方法:
方法1:使用tidyverse工具链
library(tidyverse) # 第一步:将宽表转成长表 data_long <- data %>% pivot_longer(-Test, names_to = "Category", values_to = "Value") # 第二步:将长表转成目标宽表 data_target <- data_long %>% pivot_wider(names_from = Test, values_from = Value)
方法2:使用reshape2包
library(reshape2) # 第一步:转成长格式 data_long <- melt(data, id.vars = "Test", variable.name = "Category", value.name = "Value") # 第二步:转成目标宽格式 data_target <- dcast(data_long, Category ~ Test, value.var = "Value")
说明
你之前尝试的方法仅完成了一半步骤:
melt()和pivot_longer()只是把原始宽表转成长表,缺少后续转宽的步骤t(data)是单纯的矩阵转置,会破坏数据框的列名对应关系,需要额外处理才能得到目标格式,效率更低
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

