R reshape2-将6个cols转换为2列

时间:2018-11-24 16:55:54

标签: r reshape2

我对R编程和stackoverflow还是很陌生,这是在学校的实验室里进行的,如果我问的问题不正确,请原谅我。

为我提供了包含以下列的数据集:

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()函数一起使用,并且我尝试使用Google搜索“ Reshape2melt()” “但是到处都只有很短的文档。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

这应该做到:

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

然后,您可以根据需要使用任何方式重命名列。 编辑:使用reshape2,您可以执行以下操作:

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

由于您的问题没有提供示例数据,因此我以自己的数据为例。