Search code examples
rtransfer

How to rearrange a data in R


I have a long data list similar to the following one:

set.seed(9)
part_number<-sample(1:5,5,replace=TRUE)
Type<-sample( c("A","B","C"),5, replace=TRUE)
rank<-sample(1:20,5,replace=TRUE)
data<-data.frame(cbind(part_number,Type,rank))
data

     part_number Type rank
1           2    A    3
2           1    B    1
3           2    B   18
4           2    C    7
5           3    C   10

I want to rearrange the data in the following way: 

     part_number A  B   C
1                   1
2                3  18  7      
3                      10          

I think I need to use the reshape library. But I am not sure.


Solution

  • You would go about doing the following:

    data <- reshape(data, idvar = "part_number", timevar = "Type", direction = "wide")
    data
    

    To format it exactly as you asked, I would add in,

    library(tidyverse)
    data %>%
      arrange(part_number) %>%
      dplyr::select(part_number, A = rank.A, B = rank.B, C = rank.C)
    

    If you however had a lot more columns to rename, I would use the gsub function to rename by pattern. In addition, since now the row names are messy,

    rownames(data) <- c()
    

    Let me know if this doesn't work or this wasn't what you had in mind.