これが私のデータです:
> data
Manufacturers Models
1 Audi RS5
2 BMW M3
3 Cadillac CTS-V
4 Lexus ISF
次のように、4番目の行に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)
しかし、私は私が望む場所に追加することはできません。この質問について助けていただければ幸いです。どうもありがとう。
インデックスが必要ではなく、スプレッドシートのような外観の1回限りの「クイックフィックス」が必要な場合は、
newData <- rbind( data[1:3,], Benz, data[ 4,] )
順序がデータセットの重要な機能である場合は、インデックス変数を使用するなど、安全な方法で体系化する必要があります。行名やdata.frame行の順序は、保持されない操作があるため、依存しません。
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
この機能はあなたの問題を改善し解決するでしょう:
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
私を読んでくれてありがとう!
@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)
}