2016-04-06 18 views
-1

is.naコードを使用しても何らかの理由でNAを置き換えることはできません。 NAを現在の日付に置き換えたいと思います。何か案は?私はそれが動作しません。このコードをしようとするとNAを日付に置き換えることはできません

df 

     Name  Parent  Date 
1  A  no parent  OLD 
2  B  no parent  NA 
3  C  no parent  OLD 
4  D  no parent  OLD 
5  E  no parent  OLD 

:ここ

は私のデータフレームのように見えるものである

today <- Sys.Date() 
df[["Date"]][is.na(df[["Date"]])] <- today 

str(df) 
'data.frame': 2505 obs. of 3 variables: 
$ Name : chr " A" " B" "C" "D" ... 
$ Parent: chr "no parent" "no parent" "no parent" "no parent" ... 
$ Date : chr "OLD" NA "OLD" "OLD" ... 
+3

を行う必要があり、我々は< 'DF [is.na(DFの$日付)、 "日付"]話している - as.character(今日)'?文字列にDateクラスとして渡すことはできませんので注意してください。それ以外の場合は、整数表現に変換され、次に文字に変換されます –

+0

ありがとうございました!あなたはそれを正しいものにすることができるように答えにすることができますか? –

答えて

1

Rの日付は、Dateクラス属性を持つだけdoubleです。属性が取り除かれると、それはただdoubleになります。

attributes(today) 
# $class 
# [1] "Date" 

unclass(today) 
# [1] 16897 

storage.mode(today) ## data.table::as.IDate uses an integer storage mode 
# [1] "double" 

を参照して、単一の列は、[論理マトリックスと共に使用される場合、各値は、カラムの タイプへと強制される[<-.data.frame

からRにいくつかのクラスを保持することはできませんそれは置かれるべきである。あなたは

as.character(today) 
## [1] "2016-04-06" 
を探していますが、私は「 characterへの変換が、起こるか分からない [<-.data.frameドキュメント、おそらく

as.character(`attributes<-`(today, NULL)) 
# [1] "16897" 

それとも

as.character(unclass(today)) 
# [1] "16897" 

の調査


ので、それをまとめるために、これは

df[is.na(df$Date), "Date"] <- as.character(today) 
関連する問題