2017-12-30 45 views
2

から多くの列にテキスト分析は:前処理:私のデータフレームの特定の列に前処理テキストにそれが可能である次の行を使用したデータフレーム

#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)) 

私はすべての列で、この前処理ルールを実装したいと思います(このようなデータフレームのIDを)期待して:あなたは何かを複数回行いたい場合には、例えばfunction.

、Yを定義しておくと便利です

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

あなたがすべきあなたが回答を受け取る場合は、データサンプルを提供してください。 – Seymour

+0

@Seymourご覧のとおり、私はサンプルデータを提供しています。 – PitterJe

答えて

4

次の操作を実行できます。

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

上記のベースR構文( 'setdiff ...')を 'mutate_at()'に置き換えるのは、特にOPが既にハドレー詩にあり、 'stringr'を使用しているので、私を超えています。 。 –

2

複数の列を変更するにはを使用できます。この場合には、idを除くすべての列

​​

processTextは、ご希望のコードを含む関数である:

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

次のように出力されている:

id   D E  G 
1 A mytext 11 text press 
2 B mytext stg remove 
3 C   1 2  22 
関連する問題