2017-01-04 2 views
2

因子ラベルに末尾に空白があるデータフレームが読み込まれています。私は、データフレーム内のすべての要素でこれらの末尾のスペースを削除しようとしていますが、これまでのところ成功していません。dplyrチェーンを使用して因子ラベルから末尾のスペースを取り除く

再現可能例は

lvls <- c('a ', 
      'b ', 
      'c ') 
set.seed(314) 
raw <- data.frame(a = factor(sample(lvls,100, replace=T)), 
        b = sample(1:100,100)) 

proc <- raw %>% mutate_each(funs(ifelse(is.factor(.), 
             factor(as.character(trimws(.)), 
               labels=unique(as.character(.))), 
             .))) 

str(proc) 

2つのレベルで間違っている

'data.frame': 100 obs. of 2 variables: 
$ a: int 1 1 1 1 1 1 1 1 1 1 ... 
$ b: int 31 31 31 31 31 31 31 31 31 31 ... 

できます。要素にはラベルがありません。最初の観測のみが100回繰り返される

+0

私たちもdplyr' 'なしでこれを行うことができます。右の場合、任意の因子変数に対して 'trimws()'をしたいだけですか? –

+0

私は知っていますが、私は 'dplyr'で私が間違っていることを知りたいです。 – Wietze314

+1

' read.table'で 'strip.white'をチェックしてください。 – Henrik

答えて

6

mutate_ifはあなたの友人です。あなたが文字に変換する場合、あなただけのあなただけの考慮に再変換することができますことを示唆している

raw %>% mutate_if(is.factor, trimws) 

を使用することができます気にしない場合:

raw %>% mutate_if(is.factor, funs(factor(trimws(.)))) 

あなたはタイプを維持したい場合は、することができます基地R当量

であろうより入り組ん

raw %>% mutate_if(is.factor, funs(`levels<-`(., trimws(levels(.))))) 

を使用

raw[] <- lapply(raw, function(x){if (is.factor(x)) {levels(x) <- trimws(levels(x))} ; x}) 

しかしそれは単一の変数だとあなたは、ベースはかなりきれいであるわかっている場合:あなたがしたい場合

levels(raw$a) <- trimws(levels(raw$a)) 
+1

今からmutate_ifは私の新しい友達です – Wietze314

1

これらの行に沿って何かが繰り返されますか?

l = lapply(raw, function(x) {if(is.factor(x)){x <- trimws(x)};x}) 
head(as.data.frame(l)) 
# a b 
#1 a 31 
#2 a 55 
#3 c 68 
#4 a 18 
#5 a 72 
#6 a 64 
+1

また、外部パッケージを使わずに 'raw [] < - lapply(raw、function(x)type.convert(trimws as.character(x))、as.is = TRUE))'素晴らしい投稿を試すこともできます。一を足す。 – akrun

+1

@akrunありがとうございました –

関連する問題