2015-07-14 4 views
1

У меня есть vector слов для удаления из data.tableDT следующим образом.R удаляет несколько текстовых строк в data.table

wordstoremove <- c("Simpson", "Flander", "Nahasapeemapetilon", "Spuckler", "Wiggum") 

DT <- structure(list(vid = c("Simpsons", "Flanders", "Nahasapeemapetilons", 
          "Spucklers", "Wiggums"), wr1 = c("Homer Simpson", "Ned Flanders", 
                   "Apu Nahasapeemapetilon", "Cletus Spuckler", "Chief Wiggum"), 
        wr2 = c("Bart Simpson", "Rod Flanders", "Manjula Nahasapeemapetilon", 
          "Brandine Spuckler", "Ralph Wiggum"), wr3 = c("Marge Simpson", 
                      "Todd Flanders", "Sanjay Nahasapeemapetilon", NA, "Sarah Wiggum" 
          )), .Names = c("vid", "wr1", "wr2", "wr3"), row.names = c(NA, 
                         -5L), class = c("data.table", "data.frame")) 

DT 
        vid     wr2      wr2      wr3 
1:   Simpsons   Homer Simpson    Bart Simpson    Marge Simpson 
2:   Flanders   Ned Flanders    Rod Flanders    Todd Flanders 
3: Nahasapeemapetilons Apu Nahasapeemapetilon Manjula Nahasapeemapetilon Sanjay Nahasapeemapetilon 
4:   Spucklers  Cletus Spuckler   Brandine Spuckler      NA 
5:    Wiggums   Chief Wiggum    Ralph Wiggum    Sarah Wiggum 

Я знаю, что смогу использовать решение в R remove multiple text strings in data frame.

Как это сделать, используя data.table, чтобы свести к минимуму копирование данных?

ответ

6

Попробуйте это:

library(data.table) 
foo <- function(x) gsub(paste0(wordstoremove, collapse="s?|"), "", x) 
DT[, names(DT)[-1] := lapply(.SD, foo), .SDcols = names(DT)[-1]] 
DT 
#     vid  wr1  wr2  wr3 
# 1:   Simpsons Homer  Bart Marge 
# 2:   Flanders Ned  Rod Todd 
# 3: Nahasapeemapetilons Apu Manjula Sanjay 
# 4:   Spucklers Cletus Brandine  NA 
# 5:    Wiggums Chief  Ralph Sarah 
+3

обычно просто 'имена (DT)' вместо 'COLNAMES (DT)' используются – MichaelChirico

+2

и, возможно, использовать 'ы' для обеспечения возможности множественного – MichaelChirico

+0

Да, я? пропустил его после редактирования Crop. Что вы подразумеваете под '' '? –

Смежные вопросы