R reshape2 - 将 6 列转换为 2 列

R reshape2 - transform 6 cols into 2 columns

我得到了一个包含这些列的数据集:

ID  |  X_B_Rate  |  X_D_Rate  |  Y_B_Rate  |  Y_D_Rate  | Z_B_Rate  | Z_D_Rate

如您所见,列有点重复,挑战在于编写 R 代码并将列转换为:

ID  | x_or_y  |  B_or_D  |  Rate

我尝试过 reshape2 的 melt() 函数,但我无法理解 RegExp 如何使用它

test <- melt(df, id.vars=c('ID'), measure.vars=grep('X$',colnames(df)), 
variable.name='x_or_y', value.name='Rate')

我知道代码肯定是错的。我只得到一个 ID 列表,我似乎无法理解 RegExp 如何与 melt() 函数一起工作,我尝试使用谷歌搜索 "Reshape2 melt()" 但到处都只有一个非常简短的文档。

如果有人能告诉我我做错了什么,或者至少给我指出正确文档的正确方向,我将不胜感激。

应该这样做:

yourdf %>% 
  gather("id","value",1:ncol(.))

然后您可以按照您希望的方式重命名您的列。 编辑:使用 reshape2 你可以这样做:

yourdf%>% 
  mutate(ID=row_number()) %>% 
  reshape2::melt(id.vars=c("ID"))

我用自己的数据来举例说明,因为你的问题没有提供样本数据。