W R, jak dodać nowy wiersz do ramki danych, gdy ramka danych została już zainicjowana?
Jak dotąd mam to:
df <- data.frame("hi", "bye")
names(df) <- c("hello", "goodbye")
#I am trying to add "hola" and "ciao" as a new row
de <- data.frame("hola", "ciao")
merge(df, de) # Adds to the same row as new columns
# Unfortunately, I couldn't find an rbind() solution that wouldn't give me an error
Każda pomoc będzie mile widziana
de
.names(de) <- c("hello","goodbye")
irbind
rbind(df, setNames(de, names(df)))
rbind(data.frame(a = 1), data.frame(b = 2))
… dlaczego miałbyś chcieć? Mam nadzieję, że mimo wszystko spowoduje to błąd. To jakmerge
z losowąby
zmienną. A to jest rok 2015, czy nie wszyscy ustawiająoptions(stringsAsFactors = FALSE)
?stringsAsFactors=FALSE
może być szybką naprawą, ale zmiana ustawień domyślnych, które inni ludzie ustawią inaczej, może naprawdę zrujnować dzień.Odpowiedzi:
Podobnie jak @Khashaa i @Richard Scriven wskazują w komentarzach, musisz ustawić spójne nazwy kolumn dla wszystkich ramek danych, które chcesz dołączyć.
Dlatego musisz jawnie zadeklarować nazwy kolumn dla drugiej ramki danych
de
, a następnie użyćrbind()
. Ustawiasz tylko nazwy kolumn dla pierwszej ramki danychdf
:źródło
newdf<-rbind(df, data.frame(hello="hola", goodbye="ciao"))
LUB ze zmienną:newdf<-rbind(df, data.frame(hello=var1, goodbye=var2))
Uprośćmy to:
źródło
df[nrow(df) + 1, 1:2] = c("v1", "v2")
idf[nrow(df), 3] = 100
Ale nadal warto dodać nowy wiersz. Tak więc, +1list()
. Cofnąłem twoją edycję.Lub, zgodnie z inspiracją @MatheusAraujo:
df[nrow(df) + 1,] = list("v1","v2")
Pozwoliłoby to na mieszane typy danych.
źródło
Jest teraz
add_row()
z pakietówtibble
lubtidyverse
.Nieokreślone kolumny otrzymują plik
NA
.źródło
rbind
ias.matrix
poniżejLubię
list
zamiast,c
ponieważ lepiej obsługuje mieszane typy danych. Dodanie dodatkowej kolumny do pytania pierwotnego autora:Należy pamiętać, że wymagana jest dodatkowa kontrola, jeśli konwersja ciągów / współczynników jest ważna.
Lub używając oryginalnych zmiennych z rozwiązaniem MatheusAraujo / Ytsen de Boer:
Zauważ, że to rozwiązanie nie działa dobrze w przypadku ciągów, chyba że istnieją dane w ramce danych.
źródło
hello
igoodbye
masz charakterdf
, możesz wykonać następujące czynności. Nie musisz koniecznie używać nazw na liście.df <- data.frame(hello = "hi", goodbye = "bye", volume = 1,stringsAsFactors = FALSE); rbind(df, list("hola", "ciao", 100))
.Niezbyt eleganckie, ale:
Z dokumentacji
rbind
funkcji:źródło
Muszę dodać
stringsAsFactors=FALSE
podczas tworzenia ramki danych..
źródło
Upewnij się, aby określić
stringsAsFactors=FALSE
podczas tworzenia dataframe:stringsAsFactors=FALSE
Niepowodzenie użycia podczas tworzenia ramki danych spowoduje następujący błąd podczas próby dodania nowego wiersza:źródło
Istnieje prostszy sposób na dołączenie rekordu z jednej ramki danych do drugiej, JEŚLI wiesz, że te dwie ramki danych mają te same kolumny i typy. Aby dołączyć jeden wiersz od
xx
do,yy
po prostu wykonaj następujące czynności, gdziei
jesti
ósmy wierszxx
.Proste. Bez bałaganu. Jeśli chcesz dołączyć wszystko
xx
doyy
, wywołaj pętlę lub skorzystaj z możliwości sekwencji R i zrób to:źródło
Jeśli chcesz utworzyć pustą ramkę danych i dodać zawartość w pętli, pomocne mogą być następujące czynności:
Mam nadzieję, że to pomoże :)
źródło