我需要转置R中的一个数据帧,使第一列成为转置后的DF的标题,而当前列的标题则是DF的第一列中的值.就像这样-

df = 

 | |S1|S2|S3|
1|A|1 |2 | 3|
2|B|1 |2 | 3|

df_transposed = 

 |  |A |B |
1|S1|1 |1 |
2|S2|2 |2 |
3|S3|3 |3 |

通过本例中的以下代码,我可以完成部分工作--Transposing a dataframe maintaining the first column as heading

# Sample data frame
df <- data.frame(
  ID = c(10, 20, 30),
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 22)
)

# Transpose the data frame
df_transposed <-setNames(data.frame(t(df[,-1])), df[,1])

但每次它都会获取列标题值,在本例中为'ID','Name','Age',并将它们设置为索引(或r中的row.name).我try 了各种解决方案,但到目前为止都没有奏效.它们主要面向相反的方向--取第一列并将其作为index/row.name.

推荐答案

我想你是在找这个吧.

> setNames(data.frame(names(df)[-1], t(unname(df[, -1]))), c('Row.names', df[, 1]))
  Row.names    10  20      30
1      Name Alice Bob Charlie
2       Age    25  30      22

但是,请注意,以数字开头的列名在语法上不被认为是有效的,请参阅?make.names.

为了自动获得有效的名称,我们可以利用内部为make.namesdata.frame.

> data.frame(`colnames<-`(cbind(names(df)[-1], t(unname(df[, -1]))), c('Row.names', df[, 1])))
  Row.names   X10 X20     X30
1      Name Alice Bob Charlie
2       Age    25  30      22

Data:

> dput(df)
structure(list(ID = c(10, 20, 30), Name = c("Alice", "Bob", "Charlie"
), Age = c(25, 30, 22)), class = "data.frame", row.names = c(NA, 
-3L))

R相关问答推荐

使用geom_rect的带有事件注释的时间序列图

使用列表列作为case_when LHS的输入

如何使用Cicerone指南了解R Shiny中传单 map 的元素?

self_函数无法工作--无法子集结束后的列

使用na.locf在长格式数据集中输入具有多个时间点的数据集

是否有任何解决方案可以优化VSCode中RScript的图形绘制?

寻找图片边缘

如何删除R中除某些特定名称外的所有字符串?

将复杂的组合列表转换为数据框架

编辑文件后编辑RhandsonTable

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

从BRM预测价值

使用较长的查询提取具有部分匹配的列表中的较短目标,

在使用tidyModels和XGBoost的二进制分类机器学习任务中,所有模型都失败

您是否可以将组添加到堆叠的柱状图

根据列表中项目的名称合并数据框和列表

如何将一个方阵分解成没有循环的立方体

在R中,如何将误差条放置在堆叠的每个条上?

使用geom_iles在一个切片中包含多个值

根据r中另一个文本列中给定的范围对各列求和