R 宽到长多列问题

R 宽到长多列问题,r,reshape,long-integer,tidyr,melt,R,Reshape,Long Integer,Tidyr,Melt,我有这样的想法: id role1 Approved by Role1 role2 Approved by Role2 1 Amy 1/1/2019 David 4/4/2019 2 Bob 2/2/2019 Sara 5/5/2019 3 Adam 3/3/2019 Rachel

我有这样的想法:

id    role1   Approved by Role1     role2          Approved by Role2
1      Amy        1/1/2019          David             4/4/2019
2      Bob        2/2/2019          Sara              5/5/2019
3      Adam       3/3/2019          Rachel            6/6/2019
id    Name      Role        Approved     
1      Amy      role1       1/1/2019         
2      Bob      role1       2/2/2019        
3      Adam     role1       3/3/2019  
1      David    role2       4/4/2019         
2      Sara     role2       5/5/2019        
3      Rachel   role2       6/6/2019       
我想要这样的东西:

id    role1   Approved by Role1     role2          Approved by Role2
1      Amy        1/1/2019          David             4/4/2019
2      Bob        2/2/2019          Sara              5/5/2019
3      Adam       3/3/2019          Rachel            6/6/2019
id    Name      Role        Approved     
1      Amy      role1       1/1/2019         
2      Bob      role1       2/2/2019        
3      Adam     role1       3/3/2019  
1      David    role2       4/4/2019         
2      Sara     role2       5/5/2019        
3      Rachel   role2       6/6/2019       
我以为这样会管用

 melt(df,id.vars= id,
  measure.vars= list(c("role1", "role2"),c("Approved by Role1", "Approved by Role2")),
  variable.name= c("Role","Approved"),
  value.name= c("Name","Date"))
但我得到了一个错误:在数据中找不到度量变量:c(“role1”,“role2”),c(“role1批准”,“role2批准”)

我也尝试过用列数来替换这个,但并没有任何运气


有什么建议吗??谢谢

我非常喜欢新的
tidyr::pivot\u longer()
函数。它仍然只在开发版本的
tidyr
中可用,但应该很快发布。首先,我将稍微清理一下列名,使它们具有一致的结构:

> df
# A tibble: 3 x 5
     id name_role1 approved_role1 name_role2 approved_role2
  <dbl> <chr>      <chr>          <chr>      <chr>         
1     1 Amy        1/1/2019       David      4/4/2019      
2     2 Bob        2/2/2019       Sara       5/5/2019      
3     3 Adam       3/3/2019       Rachel     6/6/2019  
输出:

     id role  name   approved
  <dbl> <chr> <chr>  <chr>   
1     1 role1 Amy    1/1/2019
2     1 role2 David  4/4/2019
3     2 role1 Bob    2/2/2019
4     2 role2 Sara   5/5/2019
5     3 role1 Adam   3/3/2019
6     3 role2 Rachel 6/6/2019
id角色名称已批准
1 1角色1艾米1/1/2019
2 1角色2大卫2019年4月4日
3 2角色1 2019年2月2日鲍勃
4 2 role2 Sara 2019年5月5日
5 3角色1亚当2019年3月3日
6 3角色2雷切尔2019年6月6日

您在
c(“role1”、“role2”)中缺少一个结束引号
很抱歉,这是我的错误输入,已更正可能的重复。有没有办法在开发版本中不这样做?也许,
tidyr()的发布版本有
gather()
用于转换为长格式,但它没有那么灵活,我不确定它是否可以处理这里的结构。