Pertanyaan Bagaimana hanya menyimpan kata-kata unik dalam setiap string dalam sebuah vektor


Saya memiliki data yang terlihat seperti ini:

vector = c("hello I like to code hello","Coding is fun", "fun fun fun")

Saya ingin menghapus kata-kata duplikat (ruang terbatas) yaitu output akan terlihat seperti

vector_cleaned

[1] "hello I like to code"
[2] "coding is fun"
[3] "fun"

5
2018-01-19 20:55


asal


Jawaban:


Membaginya (strsplit pada spasi), gunakan unique (di lapply), dan paste kembali bersama:

vapply(lapply(strsplit(vector, " "), unique), paste, character(1L), collapse = " ")
# [1] "hello i like to code" "coding is fun"        "fun"  

## OR
vapply(strsplit(vector, " "), function(x) paste(unique(x), collapse = " "), character(1L))

Perbarui berdasarkan komentar

Anda selalu dapat menulis fungsi kustom untuk digunakan dengan Anda vapply fungsi. Sebagai contoh, inilah fungsi yang mengambil string terpisah, menjatuhkan string yang lebih pendek dari sejumlah karakter tertentu, dan memiliki pengaturan "unik" sebagai pilihan pengguna.

myFun <- function(x, minLen = 3, onlyUnique = TRUE) {
  a <- if (isTRUE(onlyUnique)) unique(x) else x
  paste(a[nchar(a) > minLen], collapse = " ")
}

Bandingkan hasil dari yang berikut ini untuk melihat bagaimana hasilnya.

vapply(strsplit(vector, " "), myFun, character(1L))
vapply(strsplit(vector, " "), myFun, character(1L), onlyUnique = FALSE)
vapply(strsplit(vector, " "), myFun, character(1L), minLen = 0)

10
2018-01-19 20:57