Saya memiliki kerangka data dengan 3 kolom yang ingin saya cari. Saya memiliki daftar string yang ingin saya cari di setiap kolom. Saya ingin mengembalikan kerangka data dengan data asli, dan kolom untuk setiap string dalam daftar string dan indikator jika string itu ditemukan di kolom baris itu.

Ini adalah versi sederhana dari sesuatu yang mendekati data saya.

strings <- c("ape", "bear", "cat", "dog")

# A tibble: 7 x 3
                   snippet          headline       abstract
                     <chr>             <chr>          <chr>
1           this is an ape            An ape    some random
2           blah blah blah            An ape    some random
3 this is some random text  some random text some ape stuff
4           this is a bear    this is a bear      bear time
5            some cat text         bear time       dog time
6         cat and dog text         blah blah           blah
7           blah blah blah this is just text           blah

Keluaran dari dput(df):

dput(df)
structure(list(snippet = c("this is an ape", "blah blah blah", 
"this is some random text", "this is a bear", "some cat text", 
"cat and dog text", "blah blah blah"), headline = c("An ape", 
"An ape", "some random text", "this is a bear", "bear time", 
"blah blah", "this is just text"), abstract = c("some random", 
"some random", "some ape stuff", "bear time", "dog time", "blah", 
"blah")), .Names = c("snippet", "headline", "abstract"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -7L))

Saya ingin mengembalikan sesuatu seperti kerangka data berikut

# A tibble: 7 x 7
                   snippet          headline       abstract   ape  bear   cat   dog
                     <chr>             <chr>          <chr> <lgl> <lgl> <lgl> <lgl>
1           this is an ape            An ape    some random  TRUE FALSE FALSE FALSE
2           blah blah blah            An ape    some random  TRUE FALSE FALSE FALSE
3 this is some random text  some random text some ape stuff  TRUE FALSE FALSE FALSE
4           this is a bear    this is a bear      bear time FALSE  TRUE FALSE FALSE
5            some cat text         bear time       dog time FALSE  TRUE  TRUE FALSE
6         cat and dog text         blah blah           blah FALSE FALSE  TRUE  TRUE
7           blah blah blah this is just text           blah FALSE FALSE FALSE FALSE

Saya telah menggunakan grepl untuk mengembalikan baris yang diperlukan tetapi jelas ada cara yang lebih baik untuk melakukan ini dan melacak string mana yang mengenai baris mana

Terima kasih sebelumnya atas bantuan Anda

1
Chris 12 Desember 2017, 02:14

1 menjawab

Jawaban Terbaik

Karena Anda tidak perlu menentukan di kolom mana string ditemukan, Anda dapat menciutkan setiap baris menjadi satu kolom string, dan mencari/grepl di dalamnya

Sesuatu seperti

strings <- c("ape", "bear", "cat", "dog")

df$colStrings <- with(df, paste(snippet, headline, abstract, sep = ","))

sapply(strings, function(x) grepl(x, df$colStrings))

#        ape  bear   cat   dog
# [1,]  TRUE FALSE FALSE FALSE
# [2,]  TRUE FALSE FALSE FALSE
# [3,]  TRUE FALSE FALSE FALSE
# [4,] FALSE  TRUE FALSE FALSE
# [5,] FALSE  TRUE  TRUE  TRUE
# [6,] FALSE FALSE  TRUE  TRUE
# [7,] FALSE FALSE FALSE FALSE
5
SymbolixAU 11 Desember 2017, 23:54