Saya memiliki kerangka data dengan string di kolom. Bagaimana saya bisa mengekstrak hanya substring yang ada dalam huruf kapital dan menambahkannya ke kolom lain?

Ini adalah contoh:

    fecha          incident
1   2020-12-01     Check GENERATOR
2   2020-12-01     Check BLADE
3   2020-12-02     Problem in GENERATOR
4   2020-12-01     Check YAW
5   2020-12-02     Alarm in SAFETY SYSTEM

Dan saya ingin membuat kolom lain sebagai berikut:

    fecha          incident                  system
1   2020-12-01     Check GENERATOR           GENERATOR
2   2020-12-01     Check BLADE               BLADE
3   2020-12-02     Problem in GENERATOR      GENERATOR
4   2020-12-01     Check YAW                 YAW
5   2020-12-02     Alarm in SAFETY SYSTEM    SAFETY SYSTEM

Saya telah mencoba dengan str_sub atau str_extract_all menggunakan regex tapi saya yakin saya melakukan hal yang salah.

1
MustardRecord 8 Januari 2021, 15:11

3 jawaban

Jawaban Terbaik

Anda dapat menggunakan str_extract jika Anda ingin bekerja dalam kerangka data dan mengikatnya ke dalam alur kerja yang rapi.

Regex meminta huruf kapital atau spasi dan harus ada dua atau lebih yang berurutan (sehingga tidak menemukan kata-kata yang dikapitalisasi). str_trim menghapus spasi putih yang dapat diambil jika kata yang dikapitalisasi tidak berada di akhir string.

Perhatikan bahwa kode yang dipotong ini hanya akan mengekstrak kata-kata berhuruf besar pertama yang terhubung melalui spasi. Jika ada kata dengan huruf besar di bagian yang berbeda dari string, hanya yang pertama yang akan dikembalikan.

library(tidyverse)
x <- c("CAPITAL and not Capital", "one more CAP word", "MULTIPLE CAPITAL words", "CAP words NOT connected")
cap <- str_trim(str_extract(x, "([:upper:]|[:space:]){2,}"))
cap
#> [1] "CAPITAL"          "CAP"              "MULTIPLE CAPITAL" "CAP"

Dibuat pada 2021-01-08 oleh paket reprex (v0.3.0)

3
Mario Niepel 8 Januari 2021, 12:36
 library(tidyverse)

 string <- data.frame(test="does this WORK")

 string$new <-str_extract_all(string$test, "[A-Z]+")

 string

           test  new
1 does this WORK WORK
0
Dr. Flow 8 Januari 2021, 12:29

Jika ada kasus ketika huruf besar tidak bersebelahan, Anda dapat menggunakan str_extract_all untuk mengekstrak semua huruf kapital dalam sebuah kalimat, lalu menempelkannya.

sapply(stringr::str_extract_all(df$incident, '[A-Z]{2,}'),paste0, collapse = ' ')
#[1] "GENERATOR"  "BLADE"    "GENERATOR"     "YAW"     "SAFETY SYSTEM"
0
Ronak Shah 8 Januari 2021, 13:28