Misalnya jika saya punya ini:
n = c(2, 3, 5)
s = c("aa", "bb", "cc")
b = c(TRUE, FALSE, TRUE)
df = data.frame(n, s, b)
n s b
1 2 aa TRUE
2 3 bb FALSE
3 5 cc TRUE
Lalu bagaimana cara menggabungkan kedua kolom tersebut n
dan s
menjadi kolom baru yang diberi nama x
sedemikian rupa sehingga terlihat seperti ini:
n s b x
1 2 aa TRUE 2 aa
2 3 bb FALSE 3 bb
3 5 cc TRUE 5 cc
r
dataframe
multiple-columns
r-faq
pengguna2654764
sumber
sumber
paste()
? Untuk contoh di atas,x
kolom harus memiliki data sebagai2-aa
, lalu3-bb
dan5-cc
.paste(df$n,df$s,sep="-")
s
memiliki nilai NA? (Saya tidak suka melihat3 NA
apakahdf$s[2]=NA
)Untuk menyisipkan pemisah:
sumber
A - B
bukanA-B
. Apakah mungkin untuk menghapus ruang ekstra ini?paste(df$n,df$s,sep="-")
sep
argumen ...). Jawaban lain, diposting hampir 4 tahun sebelum jawaban Anda, namun menjawab pertanyaan dengan sempurna.Seperti yang telah disebutkan dalam komentar oleh Uwe dan UseR, solusi umum dalam
tidyverse
format tersebut adalah dengan menggunakan perintahunite
:sumber
x
mewakili nama kolom baru yang berisi nilai gabungan. Pikirkan dplyr'smutate
:df %>% dplyr::mutate(x = "your operations")
Beberapa contoh dengan NA dan penghapusannya menggunakan berlaku
sumber
tidyr
paket untuk mereproduksi jawaban yang diharapkan dari pertanyaan awal ini akan menjadi satu-kapal:tidyr::unite(df, x, n, s, sep = " ", remove = FALSE)[, c(names(df), "x")]
. Namun, saya tidak melihat alasan untuk melakukannya karenadf$x <- paste(df$n,df$s)
jauh lebih sederhana.paste
atautidyr::unite
.Menggunakan
dplyr::mutate
:sumber
dplyr::mutate()
. Maaf, hanya mencoba membantu - saya tidak akan mencemari situs ini lagi dan menjauhkan diri dari posting selanjutnya.Kita bisa menggunakan paste0 :
Jika Anda tidak ingin ada ruang padding yang dimasukkan dalam bidang gabungan. Ini lebih berguna jika Anda berencana menggunakan kolom gabungan sebagai id unik yang mewakili kombinasi dua kolom.
sumber
Dari pada
paste
(spasi default),paste0
(memaksa dimasukkannya hilangNA
sebagai karakter) atauunite
(dibatasi hingga 2 kolom dan 1 pemisah),Saya menyarankan alternatif sefleksibel
paste0
tetapi lebih berhati-hati denganNA
:stringr::str_c
Dibuat pada 2020-04-10 oleh paket reprex (v0.3.0)
catatan tambahan dari
str_c
dokumentasisumber
paste0(n,"-",s,".",b)
danstr_c(n,"-",s,".",b)
persis sama, keduanya menggunakan pemisah default yaitu string kosong''
. Saya juga tidak tahu kenapapaste
"rapi", maksud Anda Anda tidak suka spasi?paste0
danstr_c
tidak persis sama. lihat tautan berikut: (1) rdocumentation.org/packages/stringr/versions/1.3.1/topics/str_c (2) stackoverflow.com/questions/53118271/…str_c
dokumentasinya juga bisa lebih eksplisit!).Ada jawaban bagus lainnya, tetapi dalam kasus di mana Anda tidak tahu nama kolom atau jumlah kolom yang ingin Anda gabungkan sebelumnya, berikut ini berguna.
sumber