Manipulating data with R
        3
    
    
    
        
        
        
        
            
                
                
                    
                        
                    
                
                    
                        Hello,
I have a huge data but I will share just a few.
I would like to manipulate this data using the R language.
My data looks like
  No    Value
    A1  20.0585
    A2  18.2183
    A3  18.965
    A4  15.9794
    B1  16.1047
    B2  18.0323
    B3  19.144
    B4  14.5789
    C1  17.035
    C2  20.2898
    C3  19.4061
    C4  16.0626
and I would like the data to be like
No  1   2   3   4
A   20.0585 18.2183 18.965  15.9794
B   16.1047 18.0323 19.144  14.5789
C   17.035  20.2898 19.4061 16.0626
Can you please help me with that?
Thanks!!!
                    
                
                 
                
                
                    
                    
    
        
        
            R
        
        
    
    
        • 1.5k views
    
                
                
                
                
             
            
            
         
     
 
     
    
        
            
                
    
    
    
    
        
        
        
        
            
                
                
                    
                        
                    
                
                    
                        df <- data.frame(No=paste0(rep(LETTERS[1:3], each=4), rep(seq(1,4), 3)),
                 Value=rnorm(12))
library(dplyr)
library(tidyr)
df %>%
  dplyr::mutate(number=sub('.', '', No), letter=substring(No, 1, 1)) %>%
  tidyr::pivot_wider(values_from=Value, names_from=number, id_cols=letter) %>%
  dplyr::rename(No=letter) %>%
  data.frame(., check.names=FALSE)
  No             1          2          3           4
   A -0.5117558617  0.1097707 -0.9361413 -0.05781303
   B  0.0006037038 -1.1819491  1.4818229 -1.14916528
   C -0.6938707580  0.5375405  1.1568835  0.30663738
Next time please provide data via dput() output, not like you do, it makes it hard to copy-paste.
                    
                
                 
                
                
                
                
                
             
            
            
         
     
 
         
        
            
                
    
    
    
    
        
        
        
        
            
                
                
                    
                        
                    
                
                    
                        separate comes in handy here.
df |>
  separate(No, c("No", "name"), sep="(?<=^[[:alpha:]])") |>
  pivot_wider(names_from=name, values_from=Value)
                    
                
                 
                
                
                
                
                
             
            
            
         
     
 
         
        
            
                
    
    
    
    
        
        
        
        
            
                
                
                    
                        
                    
                
                    
                        Split, then reshape long-to-wide:
library(data.table)
#data
d <- fread("  No    Value
    A1  20.0585
    A2  18.2183
    A3  18.965
    A4  15.9794
    B1  16.1047
    B2  18.0323
    B3  19.144
    B4  14.5789
    C1  17.035
    C2  20.2898
    C3  19.4061
    C4  16.0626")
#split then reshape long-to-wide
d[, c("No", "No1") := tstrsplit(No, "") 
  ][, dcast(.SD, No ~ No1, value.var = "Value") ]
#    No       1       2       3       4
# 1:  A 20.0585 18.2183 18.9650 15.9794
# 2:  B 16.1047 18.0323 19.1440 14.5789
# 3:  C 17.0350 20.2898 19.4061 16.0626
                    
                
                 
                
                
                
                
                
             
            
            
         
     
 
         
        
    
    
        
            
                Login before adding your answer.
         
    
    
         
        
            
        
     
    
    Traffic: 4190 users visited in the last hour
         
    
    
        
    
    
 
Thanks so much for your help!!!!!!!