How do I insert a row into a data.frame?

Suppose you have an object data.frame

:

foo <- data.frame(ID=LETTERS[1:10], 
          blah=1:10, foo=1:10, 
          row.names=letters[1:10])

      

I want to insert a string at an arbitrary position in a data.frame. Maybe like the first row, maybe like the last. Nevertheless,

  • the data types of the resulting data.frame must be identical to the data types in the original data frame
  • string names must be stored

I tried to do it with rbind and ended up writing a long function that still doesn't work as expected. Isn't there an elegant way to do this?

I am including my function below, but I don't think it is good.

df.insert <- function(df, i, row, rowname) {
  if(is.null(df)) return(df)
  if(!is.list(row)) stop("row must be a list")
  if(!all(names(rowname) %in% colnames(df)))
    stop("df.insert error: all names of rowname must be in colnames of df")

  rnames <- rownames(df)
  nr <- nrow(df)
  if(i > nr) i <- nr

  for(n in colnames(df))
    if(!n %in% names(row)) row[[n]] <- NA

  if(nr == 0)      {
    ret <- data.frame(row)
    rownames(ret) <- rowname
  } else if(i == 0) { 
    ret <- rbind(row, df, make.row.names=FALSE)
    rownames(ret) <- c(rowname, rnames)
  } else if(i == nr) {
    ret <- rbind(df, row, make.row.names=FALSE)
    rownames(ret) <- c(rnames, rowname)
  } else { 
    ret <- rbind(df[1:i,], row, df[(i+1):nr,], make.row.names=FALSE)
    rownames(ret) <- c(rnames[1:i], rowname, rnames[(i+1):nr])
  }
  return(ret)
}

      

EDIT: The answers to this question do not handle two things: (i) adding a string to the end of the dataframe and (ii) dealing with string names. However, they provide another elegant solution that I am working on.

+3
insert r dataframe


source to share


No one has answered this question yet

See similar questions:

147
Add new row to dataframe, with specific row index, not append?

or similar:

2628
How do I insert an element into an array at a specific index (JavaScript)?
2474
How to make a great R reproducible example
1587
Insert multiple rows into one SQL query?
1462
How to iterate over rows in a DataFrame in Pandas?
1419
Select rows from DataFrame based on values ​​in column in pandas
1251
How to sort a data frame by multiple columns
1068
How to concatenate (merge) data frames (inner, outer, left, right)
820
"INSERT IGNORE" versus "INSERT ... ON DUPLICATE KEY UPDATE"
756
Remove lines with all or some neural networks (missing values) in data.frame
15
Why is `row.names` preferred over` rownames`?



All Articles
Loading...
X
Show
Funny
Dev
Pics