Home > Net >  Add a named row between two dataframes in R
Add a named row between two dataframes in R

Time:12-25

I'm trying to add a named row between two data.frames d1 and d2. My Desired_output is shown below.

I have tried a solution but it failed to get me to my desired output. Is there a solution to this?

d1 <- data.frame(b = 1:2, SE = 2:3)
d2 <- data.frame(b = 0:1, SE = 1:2)

a <- "obs" 

# Solution failed:
dplyr::bind_rows(d1, !!a := rep(NA, ncol(d1)), d2)

Desired_output = 
"   b SE
1   1  2
2   2  3
obs NA NA
4   0  1
5   1  2"

CodePudding user response:

Maybe this will help -

d1 <- data.frame(b = 1:2, SE = 2:3)
d2 <- data.frame(b = 0:1, SE = 1:2)
a <- "obs" 
d3 <- d1[1, ]
d3[] <- NA
rownames(d3) <- a

rbind(d1, d3, d2)

#     b SE
#1    1  2
#2    2  3
#obs NA NA
#11   0  1
#21   1  2

CodePudding user response:

Here is a an alternative solution, in case you want it in a pipe!

  1. We wrap the whole procedure arround add_row from tibble package.
  2. With bind_rows we bind both tables together and add a row before index2.
  3. Then we have to change between rownames_to_column and vice versa.
library(tibble)
library(dplyr)
  
add_row(bind_rows(d1,d2),
        b = NA,
        SE = NA, 
        .before = 3)%>% 
  data.frame() %>% 
  rownames_to_column("x") %>% 
  mutate(x = ifelse(x == "3", "obs", x)) %>% 
  column_to_rownames("x")
)
     b SE
1    1  2
2    2  3
obs NA NA
4    0  1
5    1  2
  • Related