Berikut ini beberapa cara:
1) sub
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2) strsplit
sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"
3) baca
read.table(text = string, sep = ":", as.is = TRUE)$V2
## [1] "E001" "E002" "E003"
4) substring
Ini mengasumsikan bagian kedua selalu dimulai pada karakter ke-4 (yang merupakan kasus pada contoh dalam pertanyaan):
substring(string, 4)
## [1] "E001" "E002" "E003"
4a) substring / regex
Jika titik dua tidak selalu dalam posisi yang diketahui, kita dapat memodifikasi (4) dengan mencarinya:
substring(string, regexpr(":", string) + 1)
5) strapplyc
strapplyc
mengembalikan bagian yang di-kurung:
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) baca.dcf
Yang ini hanya berfungsi jika substring sebelum titik dua adalah unik (seperti yang ada pada contoh di pertanyaan). Juga mengharuskan pemisah menjadi titik dua (yang ada dalam pertanyaan). Jika pemisah yang berbeda digunakan maka kita bisa menggunakannya sub
untuk menggantinya dengan titik dua terlebih dahulu. Sebagai contoh, jika separator itu _
kemudianstring <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) terpisah
7a) Menggunakan tidyr::separate
kita membuat bingkai data dengan dua kolom, satu untuk bagian sebelum titik dua dan satu untuk setelah, dan kemudian mengekstrak yang terakhir.
library(dplyr)
library(tidyr)
library(purrr)
DF <- data.frame(string)
DF %>%
separate(string, into = c("pre", "post")) %>%
pull("post")
## [1] "E001" "E002" "E003"
7b) Bergantian separate
dapat digunakan untuk membuat post
kolom dan kemudian unlist
dan unname
bingkai data yang dihasilkan:
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
## [1] "E001" "E002" "E003"
8) trimws Kita dapat menggunakan trimws
untuk memotong karakter kata dari kiri dan kemudian menggunakannya lagi untuk memotong titik dua.
trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
Catatan
Input string
diasumsikan:
string <- c("G1:E001", "G2:E002", "G3:E003")
_
sebagai pemisah dan membuat dua variabel terpisah untuk awalan dan akhiran berdasarkan jawaban @Grothendieck:prefix <- sub("_.*", "", variable)
dansuffix <- sub(".*_", "", variable)
Misalnya menggunakan
gsub
atausub
sumber
Ini jawaban sederhana lain
sumber
Terlambat ke pesta, tetapi untuk anak cucu, paket stringr (bagian dari paket "tidyverse" paket populer) sekarang menyediakan fungsi dengan tanda tangan yang diselaraskan untuk penanganan string:
sumber
Ini harus dilakukan:
memberi
sumber
Jika Anda menggunakan
data.table
maka itutstrsplit()
adalah pilihan alami:sumber
The unglue paket menyediakan alternatif, tidak ada pengetahuan tentang ekspresi reguler diperlukan untuk kasus sederhana, di sini kita akan melakukan:
Dibuat pada 2019-11-06 oleh paket reprex (v0.3.0)
Info lebih lanjut: https://github.com/moodymudskipper/unglue/blob/master/README.md
sumber