2013-04-27 20 views
8

Heres moje dane:Dodaj nowy wiersz w określonym miejscu w dataframe

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

chciałbym dodać 1 wiersz w czwartym rzędzie, tak:

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

próbowałem użyj polecenia rbind():

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

Ale nie mogę dodać do miejsca, które chcę. Byłbym wdzięczny za każdą pomoc dotyczącą tego pytania. Wielkie dzięki.

+0

możliwe duplikat [R: insert wektor jako wiersz w data.frame] (http://stackoverflow.com/questions/3651198/r-insert-a-vector-as-a-row-in-data-frame) – Roland

Odpowiedz

2

Jeśli zamówienie jest ważną cechą zbioru danych, należy je skodyfikować w bezpieczny sposób, np. Za pomocą zmiennej indeksowej. Nie będę polegać na rownames ani kolejności wierszy data.frame, ponieważ są operacje, w których nie są zachowywane.

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 
+2

Punkt zaczerpnięty z nazw rzędów, ale podejście do nazw wierszy, które jest bardzo podobne do twojego byłoby "rbind (dane," 3.1 "= data.frame (Producenci =" Benz ", Models =" C63 "))' (bez tworzenia kolumny "ind"). Oczywiście nadal potrzebne jest ponowne zamawianie, ale zapisany jest jeden krok :) – A5C1D2H2I1M1N2O1R2T1

4

W przypadku, gdy nie ma indeksu, ale raczej jednorazowym „szybkiego rozwiązania” dla niektórych wygląd arkusza kalkulacyjnego, można odwołać się do

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