Home > Software engineering >  Shift (Complete) Specific Rows Left in R
Shift (Complete) Specific Rows Left in R

Time:03-01

I pulled a data.frame from the internet and need to shift completely, (5 of 168) specific rows to the left one column. I thought best to append a column to the front of the data.frame and move the rows over but am unsuccessful. For example, I need something like this:

a b c d e    >>>    a b c d e
0 1 2 3 4           0 1 2 3 4
0 0 1 2 3           0 1 2 3 NA
0 1 2 3 4           0 1 2 3 4

CodePudding user response:

If you know which rows you want to shift, you can replace the first value(s) of these rows with NA, and then use hacksaw::shift_row_values.

library(hacksaw)
data[2, "a"] <- NA
data %>% 
  shift_row_values(at = 2)

  a b c d  e
1 0 1 2 3  4
2 0 1 2 3 NA
3 0 1 2 3  4

data

data <- read.table(header = T, text = "
           a b c d e
    0 1 2 3 4 
    0 0 1 2 3     
    0 1 2 3 4 ")

CodePudding user response:

Another possible solution, based on base R:

rows <- 2:3

df[rows,] <- cbind(df[rows, -1], NA)

df

#>   a b c d  e
#> 1 0 1 2 3  4
#> 2 0 1 2 3 NA
#> 3 1 2 3 4 NA

CodePudding user response:

You can replace a row with an offset part plus NA like this:

dat[2,] <- c(dat[2, 2:5], NA)

Data:

dat <- read.table(text="
a b c d e    
0 1 2 3 4           
0 0 1 2 3           
0 1 2 3 4",
header=TRUE)
  • Related