0

So I have a dataframe (shown below as new df) with 132 variables that lost the header at some point. I have an older dataframe (shown below as header) that has the 132 variable header in the right order. I dropped all the observations and saved it as a list, and am trying to rename the header from this example using:

colnames(part) <- c(header_list)

However, the header becomes a description of the class. When I print the values, it works like this

>header #obs, 132 variables
[1] ID                        
[2] Name                      
[3] Middle                    
[4] Last
[5] V1    

>header_list <- as.list(header)
>header_list #list of 132
ID
character(0)
                        
Name
character(0)
                      
Middle
character(0)
                   
Last
character(0)

V1  
integer(0)       

>colnames(newdf) <- c(header_list)
>head(newdf, n=0)
[1] character(0)                       
[2] character(0)                     
[3] character(0)                    
[4] character(0)
[5] integer(0)   

I think there must be something going wrong in saving it as a list - but I'm not really sure. Any advice on clearing this up would be appreciated!

Raphael
  • 517
  • 4
  • 18
tchoup
  • 971
  • 4
  • 11
  • 4
    `header_list` should not be a list but a `character`-vector. Try to print `colnames(newdf)` first; It is not a `list`. – Mossa Oct 31 '21 at 17:03

1 Answers1

1

I assume your header vector looks like this

header = c("ID", "Name", "Middle", "Last", paste0("X", 1:128))   
header

output

[1] "ID"     "Name"   "Middle" "Last"   "X1"     "X2"     "X3"     "X4"     "X5"     "X6"     "X7"     "X8"     "X9"     "X10"    "X11"   
 [16] "X12"    "X13"    "X14"    "X15"    "X16"    "X17"    "X18"    "X19"    "X20"    "X21"    "X22"    "X23"    "X24"    "X25"    "X26"   
 [31] "X27"    "X28"    "X29"    "X30"    "X31"    "X32"    "X33"    "X34"    "X35"    "X36"    "X37"    "X38"    "X39"    "X40"    "X41"   
 [46] "X42"    "X43"    "X44"    "X45"    "X46"    "X47"    "X48"    "X49"    "X50"    "X51"    "X52"    "X53"    "X54"    "X55"    "X56"   
 [61] "X57"    "X58"    "X59"    "X60"    "X61"    "X62"    "X63"    "X64"    "X65"    "X66"    "X67"    "X68"    "X69"    "X70"    "X71"   
 [76] "X72"    "X73"    "X74"    "X75"    "X76"    "X77"    "X78"    "X79"    "X80"    "X81"    "X82"    "X83"    "X84"    "X85"    "X86"   
 [91] "X87"    "X88"    "X89"    "X90"    "X91"    "X92"    "X93"    "X94"    "X95"    "X96"    "X97"    "X98"    "X99"    "X100"   "X101"  
[106] "X102"   "X103"   "X104"   "X105"   "X106"   "X107"   "X108"   "X109"   "X110"   "X111"   "X112"   "X113"   "X114"   "X115"   "X116"  
[121] "X117"   "X118"   "X119"   "X120"   "X121"   "X122"   "X123"   "X124"   "X125"   "X126"   "X127"   "X128"  

I guess your tibble looks like this

df = array(rnorm(1320), c(10, 132)) %>% as_tibble()        
df

output

# A tibble: 10 x 132
       V1      V2      V3       V4    V5     V6      V7      V8      V9    V10    V11     V12     V13
    <dbl>   <dbl>   <dbl>    <dbl> <dbl>  <dbl>   <dbl>   <dbl>   <dbl>  <dbl>  <dbl>   <dbl>   <dbl>
 1 -1.04   2.29   -0.425   0.553   0.621 -0.437  0.148  -0.237  -1.04    1.69   0.370 -0.654  -0.148 
 2  0.447 -1.26    0.726   0.443   0.277  1.83   1.46   -2.13    0.898   1.55   0.342  1.13   -0.977 
 3  1.71   0.541   1.20   -0.00483 1.89   0.786  0.0665 -0.0123  0.186   0.713 -0.196 -1.04   -1.27  
 4 -1.82  -0.0192  1.62   -0.0228  0.328 -1.16   0.444  -1.85   -0.814   0.396  0.668  0.906  -1.22  
 5  0.299  1.47   -0.466   1.04    0.790  0.568 -1.01    0.0653  0.912   0.664  0.982 -1.31   -0.475 
 6  0.631 -0.293  -0.403   0.978   1.17   0.998 -2.68    0.749   0.637  -0.231 -2.15   1.77    0.276 
 7  0.331 -0.913   0.338   1.69    1.23  -0.600 -0.965  -0.155   0.683   0.845 -0.654 -0.170  -0.806 
 8  2.17   0.173   0.847   1.24    0.244 -1.59   0.215   1.15    0.936   0.675 -0.948 -0.161   0.447 
 9  0.155 -0.296   0.0266  1.91    0.230 -0.953 -1.74    0.438   0.0543  0.821 -2.60  -0.0916 -0.0223
10  1.34   0.917  -0.598   0.0840  2.19   0.843  1.60   -0.605  -0.373  -1.86  -0.306 -0.183  -1.35  
# ... with 119 more variables: V14 <dbl>, V15 <dbl>, V16 <dbl>, V17 <dbl>, V18 <dbl>, V19 <dbl>,
#   V20 <dbl>, V21 <dbl>, V22 <dbl>, V23 <dbl>, V24 <dbl>, V25 <dbl>, V26 <dbl>, V27 <dbl>, V28 <dbl>,
#   V29 <dbl>, V30 <dbl>, V31 <dbl>, V32 <dbl>, V33 <dbl>, V34 <dbl>, V35 <dbl>, V36 <dbl>, V37 <dbl>,
#   V38 <dbl>, V39 <dbl>, V40 <dbl>, V41 <dbl>, V42 <dbl>, V43 <dbl>, V44 <dbl>, V45 <dbl>, V46 <dbl>,
#   V47 <dbl>, V48 <dbl>, V49 <dbl>, V50 <dbl>, V51 <dbl>, V52 <dbl>, V53 <dbl>, V54 <dbl>, V55 <dbl>,
#   V56 <dbl>, V57 <dbl>, V58 <dbl>, V59 <dbl>, V60 <dbl>, V61 <dbl>, V62 <dbl>, V63 <dbl>, V64 <dbl>,
#   V65 <dbl>, V66 <dbl>, V67 <dbl>, V68 <dbl>, V69 <dbl>, V70 <dbl>, V71 <dbl>, V72 <dbl>, ...

If it is then just do it

names(df) = header
df

output

# A tibble: 10 x 132
       ID    Name  Middle     Last    X1     X2      X3      X4      X5     X6     X7      X8      X9
    <dbl>   <dbl>   <dbl>    <dbl> <dbl>  <dbl>   <dbl>   <dbl>   <dbl>  <dbl>  <dbl>   <dbl>   <dbl>
 1 -1.04   2.29   -0.425   0.553   0.621 -0.437  0.148  -0.237  -1.04    1.69   0.370 -0.654  -0.148 
 2  0.447 -1.26    0.726   0.443   0.277  1.83   1.46   -2.13    0.898   1.55   0.342  1.13   -0.977 
 3  1.71   0.541   1.20   -0.00483 1.89   0.786  0.0665 -0.0123  0.186   0.713 -0.196 -1.04   -1.27  
 4 -1.82  -0.0192  1.62   -0.0228  0.328 -1.16   0.444  -1.85   -0.814   0.396  0.668  0.906  -1.22  
 5  0.299  1.47   -0.466   1.04    0.790  0.568 -1.01    0.0653  0.912   0.664  0.982 -1.31   -0.475 
 6  0.631 -0.293  -0.403   0.978   1.17   0.998 -2.68    0.749   0.637  -0.231 -2.15   1.77    0.276 
 7  0.331 -0.913   0.338   1.69    1.23  -0.600 -0.965  -0.155   0.683   0.845 -0.654 -0.170  -0.806 
 8  2.17   0.173   0.847   1.24    0.244 -1.59   0.215   1.15    0.936   0.675 -0.948 -0.161   0.447 
 9  0.155 -0.296   0.0266  1.91    0.230 -0.953 -1.74    0.438   0.0543  0.821 -2.60  -0.0916 -0.0223
10  1.34   0.917  -0.598   0.0840  2.19   0.843  1.60   -0.605  -0.373  -1.86  -0.306 -0.183  -1.35  
# ... with 119 more variables: X10 <dbl>, X11 <dbl>, X12 <dbl>, X13 <dbl>, X14 <dbl>, X15 <dbl>,
#   X16 <dbl>, X17 <dbl>, X18 <dbl>, X19 <dbl>, X20 <dbl>, X21 <dbl>, X22 <dbl>, X23 <dbl>, X24 <dbl>,
#   X25 <dbl>, X26 <dbl>, X27 <dbl>, X28 <dbl>, X29 <dbl>, X30 <dbl>, X31 <dbl>, X32 <dbl>, X33 <dbl>,
#   X34 <dbl>, X35 <dbl>, X36 <dbl>, X37 <dbl>, X38 <dbl>, X39 <dbl>, X40 <dbl>, X41 <dbl>, X42 <dbl>,
#   X43 <dbl>, X44 <dbl>, X45 <dbl>, X46 <dbl>, X47 <dbl>, X48 <dbl>, X49 <dbl>, X50 <dbl>, X51 <dbl>,
#   X52 <dbl>, X53 <dbl>, X54 <dbl>, X55 <dbl>, X56 <dbl>, X57 <dbl>, X58 <dbl>, X59 <dbl>, X60 <dbl>,
#   X61 <dbl>, X62 <dbl>, X63 <dbl>, X64 <dbl>, X65 <dbl>, X66 <dbl>, X67 <dbl>, X68 <dbl>, ...
Marek Fiołka
  • 4,825
  • 1
  • 5
  • 20