2017-12-30 17 views
2

die folgenden Zeilen verwendet es vorverarbeitet Text in einer bestimmten Spalte meines Datenrahmen möglich ist:Preprocessing: Textanalyse auf vielen Spalten aus einer Datenrahmen

#text to lower case 
df$name <- tolower(df$name) 
#remove all special characters 
df$name <- gsub("[[:punct:]]", " ", df$name) 
#remove long spaces 
df$name <- gsub("\\s+"," ",str_trim(df$name)) 

Ich mag diese Vorverarbeitung Regeln in allen Spalten implementieren (erwarten id) eines Datenrahmens wie folgt aus:

df <- data.frame(id = c("A","B","C"), D = c("mytext 11","mytext +", "!!"), E = c("text","stg","1.2"), F = c("press","remove","22")) 
+0

Sie sollten Liefern Sie eine Datenprobe, wenn Sie Antworten erhalten möchten – Seymour

+0

@Seymour, wie Sie sehen können Ich biete Beispieldaten. – PitterJe

Antwort

4

Wenn Sie etwas mehrere Male tun wollen, ist es oft nützlich, eine function.

zum Beispiel zu definieren, y ou könnte folgendes tun:

library(stringr) 
df <- data.frame(id = c("A","B","C"), D = c("mytext 11","mytext +", "!!"), 
        E = c("text","stg","1.2"), F = c("press","remove","22")) 

# create a function so we can apply this multiple times easily. 
process <- function(my_vector) 
{ 
    my_vector <- tolower(my_vector) 
    #remove all special characters 
    my_vector <- gsub("[[:punct:]]", " ", my_vector) 
    #remove long spaces 
    my_vector <- gsub("\\s+"," ",str_trim(my_vector)) 
    # return result 
    return(my_vector) 
} 

# for all columns except 'id', apply our function. 
for(x in setdiff(colnames(df),"id")) 
{ 
df[[x]]=process(df[[x]]) 
} 
+0

Warum jemand die obige R-Syntax bevorzugen würde ('für (x in setdiff ...') zu 'mutate_at()' ist jenseits von mir, besonders da das OP bereits im Hadley-Vers ist und 'stringr' verwendet. . –

2

Sie dplyr::mutate_at() verwenden können mehrere Spalten zu mutieren; in diesem Fall werden alle Spalten Ausnahmeid:

mydf %>% 
    mutate_at(.vars = vars(-id), 
      .funs = processText) 

Wo processText eine Funktion gewünschten Code enthalten ist:

processText <- function(str) { 
str %>% 
    str_to_lower() %>% 
    str_replace_all(pattern="[[[:punct:]]]|[\\s+]", replacement=" ", .) %>% 
    str_trim() 
} 

Der Ausgang ist wie folgt:

id   D E  G 
1 A mytext 11 text press 
2 B mytext stg remove 
3 C   1 2  22 
Verwandte Themen