Home > Blockchain >  How can i add a row vector in a tibble in R?
How can i add a row vector in a tibble in R?

Time:09-22

I have a tibble in R that has 11 observations of every month.Apart from June that has 0. My data frame (tibble) looks like this :

library(tidyverse)
A = c(1,2,3,4,5,7,8,9,10,11,12)
B = rnorm(11,0,1)
Data = tibble(A,B);Data

But i want to add the 0 observation of June of this timeseries. Something like :

d = c(6,0);d
newdata = rbind(Data,d)
order(newdata$A)

but the 12 (december) appears.Any help?

CodePudding user response:

Two approaches:

(1) We can use add_row for this. However, d must be named and we need to splice it into add_row with the tribble bang !!! operator. Then we can arrange the data so that the month are sorted from 1 to 12. Of course you can specify add_row directly like in @Chris answer without the need of an external vector.

library(dplyr)

A = c(1,2,3,4,5,7,8,9,10,11,12)
B = rnorm(11,0,1)
Data = tibble(A,B)

d = c(A = 6, B = 0)

newdata <- Data %>% 
  add_row(!!! d) %>% 
  arrange(A)

# check
newdata
#> # A tibble: 12 x 2
#>        A        B
#>    <dbl>    <dbl>
#>  1     1  1.22   
#>  2     2  0.0729 
#>  3     3  0.597  
#>  4     4 -1.26   
#>  5     5  0.928  
#>  6     6  0      
#>  7     7 -1.08   
#>  8     8  0.704  
#>  9     9 -0.119  
#> 10    10 -0.462  
#> 11    11 -0.00388
#> 12    12  1.56

order(newdata$A) 
#>  [1]  1  2  3  4  5  6  7  8  9 10 11 12

(2) We can use tidyr::complete, as suggested by @Ronak in the comments, although we use a slightly different specification with full_seq:

library(tidyr)

Data %>% 
  complete(A = full_seq(A, 1), fill = list(B = 0))

#> # A tibble: 12 x 2
#>        A      B
#>    <dbl>  <dbl>
#>  1     1 -0.258
#>  2     2 -1.18 
#>  3     3 -0.165
#>  4     4  0.775
#>  5     5  0.926
#>  6     6  0    
#>  7     7  0.343
#>  8     8  1.10 
#>  9     9  0.359
#> 10    10  0.934
#> 11    11 -0.444
#> 12    12  0.184

Created on 2021-09-21 by the reprex package (v2.0.1)

CodePudding user response:

You can define the additional row in add_row:

library(dplyr)
Data %>%
  add_row(A = 6, B = 0) %>% 
  arrange(A)
# A tibble: 12 x 2
       A       B
   <dbl>   <dbl>
 1     1 -0.547 
 2     2 -0.564 
 3     3 -0.890 
 4     4 -0.477 
 5     5 -0.998 
 6     6  0     
 7     7 -0.776 
 8     8  0.0645
 9     9  0.959 
10    10 -0.110 
11    11 -0.511 
12    12 -0.911 
  • Related