繁体   English   中英

宽到长的多列问题

[英]wide to long multiple columns issue

我有这样的事情:

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"))

但我收到错误消息:测量在data:c(“ role1”,“ role2”),c(“ Role1批准”,“ Role2批准”)中找不到的变量

我也尝试用列数替换它,但没有任何运气。

有什么建议么?? 谢谢!

我真的很喜欢新的tidyr::pivot_longer()函数。 它仍然仅在tidyr的开发版本中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  

然后,很容易通过pivot_longer()转换为长格式:

library(tidyr)

df %>%
    pivot_longer(
        -id,
        names_to = c(".value", "role"),
        names_sep = "_"
    )

输出:

     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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM