Di R, bagaimana Anda menambahkan baris baru ke bingkai data setelah bingkai data telah diinisialisasi?
Sejauh ini saya punya ini:
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
Bantuan apa pun akan dihargai
de
juga.names(de) <- c("hello","goodbye")
danrbind
rbind(df, setNames(de, names(df)))
rbind(data.frame(a = 1), data.frame(b = 2))
.. mengapa Anda mau? Saya berharap itu akan membuat kesalahan terlepas. Ini sepertimerge
menggunakanby
variabel acak . Dan ini tahun 2015, bukankah semua orang menetapkanoptions(stringsAsFactors = FALSE)
?stringsAsFactors=FALSE
dapat menjadi perbaikan cepat, tetapi mengubah default yang diatur orang lain secara berbeda dapat benar-benar merusak sehari.Jawaban:
Seperti yang ditunjukkan oleh @Khashaa dan @Richard Scriven dalam komentar, Anda harus menetapkan nama kolom yang konsisten untuk semua bingkai data yang ingin Anda tambahkan.
Karenanya, Anda harus secara eksplisit mendeklarasikan nama kolom untuk bingkai data kedua
de
,, lalu gunakanrbind()
. Anda hanya mengatur nama kolom untuk data frame pertama,df
:sumber
newdf<-rbind(df, data.frame(hello="hola", goodbye="ciao"))
ATAU dengan variabel:newdf<-rbind(df, data.frame(hello=var1, goodbye=var2))
Mari kita membuatnya sederhana:
sumber
df[nrow(df) + 1, 1:2] = c("v1", "v2")
dandf[nrow(df), 3] = 100
Tapi tetap saja itu poin bagus tentang menambahkan baris baru. Jadi, +1list()
. Saya mengembalikan suntingan Anda.Atau, seperti yang terinspirasi oleh @MatheusAraujo:
df[nrow(df) + 1,] = list("v1","v2")
Ini akan memungkinkan untuk tipe data campuran.
sumber
Ada sekarang
add_row()
dari pakettibble
atautidyverse
.Kolom yang tidak ditentukan mendapatkan
NA
.sumber
rbind
dan dias.matrix
bawah iniSaya suka
list
bukanc
karena menangani tipe data campuran lebih baik. Menambahkan kolom tambahan ke pertanyaan pengirim asli:Perhatikan bahwa beberapa kontrol tambahan diperlukan jika konversi string / faktor penting.
Atau menggunakan variabel asli dengan solusi dari MatheusAraujo / Ytsen de Boer:
Perhatikan bahwa solusi ini tidak bekerja dengan baik dengan string kecuali ada data yang ada di dalam kerangka data.
sumber
hello
dangoodbye
dalam karakter dalamdf
, Anda dapat melakukan hal berikut. Anda tidak perlu menggunakan nama dalam daftar.df <- data.frame(hello = "hi", goodbye = "bye", volume = 1,stringsAsFactors = FALSE); rbind(df, list("hola", "ciao", 100))
.Tidak terlalu anggun, tapi:
Dari dokumentasi
rbind
fungsi:sumber
Saya perlu menambahkan
stringsAsFactors=FALSE
saat membuat kerangka data..
sumber
Pastikan untuk menentukan
stringsAsFactors=FALSE
kapan membuat bingkai data:Gagal digunakan
stringsAsFactors=FALSE
saat membuat kerangka data akan menghasilkan kesalahan berikut saat mencoba menambahkan baris baru:sumber
Ada cara yang lebih sederhana untuk menambahkan catatan dari satu kerangka data ke kerangka data lain JIKA Anda tahu bahwa kedua kerangka data tersebut berbagi kolom dan jenis yang sama. Untuk menambahkan satu baris dari
xx
keyy
hanya melakukan berikut di manai
adalahi
'th baris dalamxx
.Sederhana seperti itu. Tidak ada ikatan yang berantakan. Jika Anda perlu menambahkan semua
xx
untukyy
, maka panggil satu lingkaran atau manfaatkan kemampuan urutan R dan lakukan ini:sumber
Jika Anda ingin membuat bingkai data kosong dan menambahkan konten dalam satu lingkaran, hal berikut ini dapat membantu:
Semoga bermanfaat :)
sumber