2017-12-28 10 views
1
Age <- c(90,56,51,'NULL',67,'NULL',51) 
Sex <- c('Male','Female','NULL','male','NULL','Female','Male') 
Tenure <- c(2,'NULL',3,4,3,3,4) 
df <- data.frame(Age, Sex, Tenure) 

上記の例では、文字/文字列の桁として「NULL」値があります。 私は 'NULL'値の代わりにNAを代用しようとしています。私はそれを単一の列のためにdf$age[which(df$Age=='NULL)]<-NA'とすることができました。しかし、私はこれをすべての列に書きたくありません。DataFrameのすべての列の値を検索して置換する

'NULL'の値がdfになるようにすべての列に同様のロジックを適用する方法をNAsに変換しますか?私はapplyまたはカスタム定義された関数かforループを推測しています。

+0

[この回答](https://stackoverflow.com/a/29445422/1270695)に記載され、[ここ](https://github.com/mrdwab/)から入手できる「makemeNA」機能を確認してください。とても楽しいです)。そうすれば 'makemeNA(df、" NULL ")'を実行することができます。 – A5C1D2H2I1M1N2O1R2T1

+1

重複:https://stackoverflow.com/questions/3357743/replacing-character-values-with-na-in-a-data-frame – user20650

答えて

0

dplyrreplace'NULL'の値をすべての列に使用してから、type.convertで列の型を変換できます。現在、すべての列がfactorクラスです(「年齢/テニュアが」あるべきと仮定numeric/integerクラス)

library(dplyr) 
res <- df %>% 
     mutate_all(funs(type.convert(as.character(replace(., .=='NULL', NA))))) 
str(res) 
#'data.frame': 7 obs. of 3 variables: 
#$ Age : int 90 56 51 NA 67 NA 51 
#$ Sex : Factor w/ 3 levels "Female","male",..: 3 1 NA 2 NA 1 3 
#$ Tenure: int 2 NA 3 4 3 3 4 
+0

お返事ありがとうございます。私はこの論理を大規模なデータフレームに適用しようとしています。このフレームは、NULL値がほとんどない日付時間クラスとしての列で構成されています。しかし、私はエラー '' 'mutate_impl(.data、dots)のエラー: 評価エラー:文字列が標準的な明確なフォーマットではないと言っています。' '' –

+0

@AshishSahuデータの構造が似ていると仮定しますあなたが示した例には、うまくいくはずです。 'str(df)'を 'str(yourlargerdata)'でチェックして、クラスに違いがあるかどうか確認してください。 – akrun

+1

私はそれを理解しました。私の推測では、私の '' 'str(myDataFrame)' 'にはNULL値を含むDate Timeクラスの列がいくつかありました。したがって、 '' mutate_all'''または '' replace'''関数を実行しているときに評価エラーが発生していました。これを克服するために、私はすべての列をformateとして文字列に変換し、後で代用を行いました。 –

5

ベースR・ソリューション

replace(df, df =="NULL", NA) 
3
一つでもワンステップで置き換えるために使用することができます

df[df=="NULL"] <- NA 
関連する問題