0

Hi I currently have a large data frame that I am trying to layout to be presentable. I would like to insert a blank row after every 5th line. How would you do this?

Iv seen solutions that show getting a row after every other line but nothing specific to a number of lines of your choice

    df <- data.frame(Name=c("Paul","Paul","Mary","Bill","Jane","Paul","Mary","John", "Bill","John"),ElectionDay=c("November 2010","November 2014", "November 2010","November 2010","November 2014","November 2006", "November 2014","November 2010","November 2014","November 2014"))

Name
ElectionDay
1   Paul    November 2010
2   Paul    November 2014
3   Mary    November 2010
4   Bill    November 2010
5   Jane    November 2014
6   Paul    November 2006
7   Mary    November 2014
8   John    November 2010
9   Bill    November 2014
10  John    November 2014

Should look like:


Name
ElectionDay
1   Paul    November 2010
2   Paul    November 2014
3   Mary    November 2010

4   Bill    November 2010
5   Jane    November 2014
6   Paul    November 2006

7   Mary    November 2014
8   John    November 2010
9   Bill    November 2014

10  John    November 2014

If I choose to insert a new row after every 3 rows

  • You need to add sample data and how should your output should look like. So we can work on reproducible solution. – Vishwas Jul 31 '19 at 02:36

1 Answers1

1
#inserting blank row after fifth line in iris dataset

banana <- iris[1, ]
banana[1,] <- NA
banana

rbind(iris[1:5, ], banana, iris[6:nrow(iris),])


# inserting blank row after every fifth line in iris dataset
t1 <- seq(from=0, to=nrow(iris), by=5)
t2 <- seq(from=1, to=nrow(iris), by=5)

ref <- data.frame(from=t2, to=t1[-1])

tmp <- c()
for(i in 1:nrow(ref)){
  tmp2 <- rbind(iris[ref[i, "from"]:ref[i,"to"],], banana)
  tmp <- rbind(tmp, tmp2)
}
Adam Quek
  • 6,973
  • 1
  • 17
  • 23
  • This example isn't working when I plug in my data set. When I run the line ref <- data.frame(from=t2, to=t1[-1]). I get an error arguments imply differing number of rows: 589, 588 – Vincent Collis Jul 31 '19 at 03:21
  • The code above was for the iris dataset with a nice round number of 150 rows. For your own data, just edit the referencetable with the appropriate number especially for the last row. – Adam Quek Jul 31 '19 at 03:24
  • 1
    Found a super simple answer, but thanks for the help! #DATA df1 = mtcars row.names(df1) = NULL #Number of empty rows to insert N = 3 #Every N rows after which empty rows should be inserted after_rows = 4 do.call(rbind, lapply(split(df1, ceiling(1:NROW(df1)/after_rows)), function(a) rbind(a, replace(a[1:N,], TRUE, "")))) – Vincent Collis Jul 31 '19 at 03:26