2017-01-06 12 views
1

残念ですが、重複していると、データフレーム内の値を別の列に基づいて数値または文字列に変更できる多くの回答が見つかりましたが、その値に基づいて各値を変更しようとすると機能するようです。R他の列の基準に基づく列の日付形式

だから私は、例えば、いくつかの答えを使用しようとした私はR - Update a Value in One Column Based on Criteria in Other Columns

を読んで今私のデータを見て:

class(df[1,1]) 
[1] "character" 

>df[1,1] 

[1] "2015-03-01T00:00:00Z" 

>as.Date(df[1,1]) 

[1] "2015-03-01" 

だから私は、私は、私はそれが見えるようにしたいものに私のデータを変換することができます知っています。しかし:

> df$a[df$b=="start"] <- as.Date(df$a[df$b=="start"]) 
> df[1,1] 
[1] "16495" 

私は、文字列の数にそれらのすべてを変更することができますが、私がしようとすると、何らかの理由で、それぞれの値それにas.Dateを行うには、私はすぐにしようとした奇妙な数

を返します。

lapply(df, function(x){if(df$b=="experience.start"){df$a<-as.Date(df$a)}}) 

正しい値がコンソールに表示されていましたが、これを使用してデータフレームを編集する方法がわかりません。

+0

http://stackoverflow.com/questions/17030173/why-does-hello-0-return-true/17030209#17030209に関連する? – lukeA

+0

異なる列のデータを1つの列に入れようとしているようですが、これは不可能だと思います。また、「奇妙な数」に関しては、16495は1970-01-01と2015-03-01の間の日数です。これは、日付が数値形式で表現される方法です。 – Haboryme

答えて

2

:あなたはそれを持っていたとして、2回連続で実行した場合

df$c <- as.Date(NA) 
df$c[df$b=="start"] <- as.Date(df$a[df$b=="start"]) 

コードは、それが働いた場合でも、異なる結果を生成しますcharacterおよびDateクラスに属する値を持つ列。いいえ、あなたは2つの方法で問題を解決できます。

最初のソリューション

あなたは、このように別の列newdatesを作成することができます。

df$newdates <- as.Date(NA) 
df$newdates[df$b == "experience.start"] <- as.Date(df$a[df$b == "experience.start"]) 

をこのコードではないすべての行が同じb列を持っているので、あなたが、NAが満たされたいくつかの行を持っています〜experience.start

第二の溶液

あなたが妥協案に同意し、 Date characterに変換することができ

df$a[df$b == "experience.start"] <- as.character(as.Date(df$a[df$b=="experience.start"])) 

このように、a列の型がcharacterになりますし、bが等しい場合には、2015-03-04の形式の日付があります。それ以外の場合は、2011-02-11T00:00:00Zとなります。

1

"a"変数に値を割り当てるのではなく、データフレームの設定がわかっていると仮定して、新しいDate変数を作成して割り当てます。 Haborymeが言うように

、既存の列は「」文字ベクトル、as.Date()は変換オンザフライされている文字にDateオブジェクト、返す - "16495"を引用符で囲んで通知を。

異なる変数に割り当てることによって、Rは自動的にその日付ベクトルを作成し、元の情報を保存してコード全体をより安全にします。

次のコードは動作するはずです。複数の行を連続して実行しても同じ結果が得られます。あなたが持ってしようとしていることができないので、私の知る限り

関連する問題