如何将单列长格式DataFrame转换为单行宽格式DataFrame?
单列长格式DataFrame转单行宽格式(保留原行名为列名)
以下是几种不同工具集的简便实现方式,适配你给出的test数据结构:
Base R 实现
直接利用转置函数快速完成,步骤极简:
test <- data.frame(c(1:5), row.names = LETTERS[1:5]) # 转置并转为数据框,原行名自动成为新列名 wide_df <- as.data.frame(t(test)) # 可选:移除自动生成的行名(原数据框的列名) rownames(wide_df) <- NULL
转置后原数据框的行名会直接变成新数据框的列名,最终得到单行5列的宽格式结果。
dplyr + tidyr 实现
通过先提取行名为单独列,再使用pivot_wider完成转换:
library(dplyr) library(tidyr) test <- data.frame(value = 1:5, row.names = LETTERS[1:5]) %>% # 把原行名转为名为"row_id"的列 tibble::rownames_to_column(var = "row_id") %>% # 按row_id的值生成列名,value列的内容填充对应位置 pivot_wider(names_from = row_id, values_from = value)
提前给原数值列命名(比如value)会让代码更易读,避免自动生成的奇怪列名。
data.table 实现
借助data.table的dcast函数,配合行名提取完成转换:
library(data.table) test <- data.frame(value = 1:5, row.names = LETTERS[1:5]) # 转为data.table并保留原行名为"row_id"列 dt <- as.data.table(test, keep.rownames = "row_id") # 转换为宽格式,用.表示无分组行,最终移除多余的.列 wide_dt <- dcast(dt, . ~ row_id, value.var = "value")[, !".", with = FALSE] # 可选:转回普通data.frame wide_df <- as.data.frame(wide_dt)
这种方式处理大型数据集时效率更高,适合你的响应式大表场景。
内容的提问来源于stack exchange,提问作者Village.Idyot
相关产品推荐
相关产品推荐

