在数据框中的特定位置添加新行

11

这是我的数据:

 > data
  Manufacturers       Models
1   Audi                RS5  
2   BMW                 M3  
3   Cadillac            CTS-V  
4   Lexus               ISF

我想在第四行中添加1行,就像这样:

 > data
  Manufacturers       Models
1   Audi                RS5  
2   BMW                 M3  
3   Cadillac            CTS-V  
4   Benz                C63
5   Lexus               ISF

我尝试使用rbind()函数,例如:

 Benz = data.frame(Manufacturers = "Benz", Models = "C63")
 newdata = rbind(data,Benz)

但是我无法添加到我想要的位置。 对于这个问题,我会非常感激任何帮助。谢谢。


可能是R:将向量作为数据框中的一行插入的重复问题。 - Roland
4个回答

7

如果您不需要索引,而是想要某些类似电子表格的外观的一次性“快速修复”,则可以采用以下方法:

newData <- rbind( data[1:3,], Benz, data[ 4,] )

4

如果您的数据集中排序是一个重要特征,那么您应该以安全的方式对其进行编码,例如使用索引变量。我不会依赖于行名称或数据框行的顺序,因为有些操作它们并不被保留。

data <- read.table(text="Manufacturers       Models
1   Audi                RS5  
2   BMW                 M3  
3   Cadillac            CTS-V  
4   Lexus               ISF",header=TRUE)

data$ind <- seq_len(nrow(data))
data <- rbind(data,data.frame(Manufacturers = "Benz", Models = "C63",ind=3.1))
data <- data[order(data$ind),]

#   Manufacturers Models ind
# 1          Audi    RS5 1.0
# 2           BMW     M3 2.0
# 3      Cadillac  CTS-V 3.0
# 5          Benz    C63 3.1
# 4         Lexus    ISF 4.0

3
关于行名的观点已被采纳,但跟你类似的行名方法是 rbind(data, "3.1" = data.frame(Manufacturers = "Benz", Models = "C63")) (没有创建 "ind" 列)。当然,仍需要重新排序,但可以节省一步 :) - A5C1D2H2I1M1N2O1R2T1

2
这个函数可以改善并解决你的问题:
INSERT_NA_ROW <- function(indice, tabla) {
  new_Row <- NA
  long <- NROW(tabla)
  new_Data<- rbind(tabla[1:indice,], new_Row ,tabla[(indice + 1):(long),])
  return(new_Data)
} # Insert Row in index of dataframe

Thanks for read me!


1
我使用了@Sergio Mora的答案来适应并解决这个问题。今天我看到了这个问题,我需要一个解决方案。
insert_row <- function(index, new_row, dat){
  if(is.matrix(dat) && ncol(dat) > 1){
    long <- NROW(dat)
    if(index == 1){
      new_data <- rbind(new_row, dat)  
    }
    else if(index == long){
      new_data <- rbind(dat, new_row)
    }
    else{
      new_data <- rbind(dat[1 : (index - 1), ], new_row, dat[index : long, ])
    }
    row.names(new_data) <- NULL
  }
  else if(ncol(dat) == 1 || is.vector(dat)){
    long <- length(dat)
    if(index == 1){
      new_data <- c(new_row, dat)  
    }
    else if(index == long){
      new_data <- c(dat, new_row)
    }
    else{
      new_data <- c(dat[1 : (index - 1)], new_row, dat[index : long])
    }
    row.names(new_data) <- NULL
  }
  return(new_data)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接