2017-10-04 4 views
0

私は "就学" という名前のデータフレームを持っている:要因の2つの日付の違いを調べるにはどうすればよいですか?

"enrollments" data frame

enrolled_at、unenrolled_atとfully_participated_atが要因です。私は空でない2つの属性間の時間差を示す新しい列をデータフレームに追加したいと思います。この新しい列のタイプは重要ではありませんが、このフォーマット(HH MM SS)で時間を表示する必要があります。

私は、以下の擬似コードやりたい:

If (unenrolled_at == empty && fully_participated_at != empty) 
    newAttributeValue = fully_participated_at - enrolled_at 
else if (unenrolled_at != empty && fully_participated_at == empty) 
    newAttributeValue = unenrolled_at - enrolled_at 
else 
    do nothing 

は編集:私はこれを行うには、サイト内のすべてのメソッドを試みたが、彼らは動作しませんが。私のデータフレームに因子クラスとして保存されているが、サイト内の解はfactor - factorまたは(String)time - (String)時間です。私はまた、それぞれ "as.character"と "as.Date"関数を試しました。だから私の質問は重複していません。ローランドタマヨは私の問題を解決するためにさまざまな方法を提供していますが、それは私にエラー与える:「ymd_hms(コメントの$ unenrolled_at)でエラーが発生しました:機能見つけることができませんでした 『あなたはパッケージlubridateを使用することができます

+4

私は質問をする前にそれを試してみました 'as.Date' –

+3

のしてくださいcharToDate(x)のエラー:文字列が標準的な一意のフォーマットではありません ---試行されたコマンド:difftime(as.Date(as.character(enrollments $ unenrolled_at)) - as.Date .character(enrollments $ enrolled_at)))) – useR

+0

で日付フォーマットに変換し、その後、as.character''で最初の文字に変換し、編集可能なテキストとして、あなたのデータを含める代わりに、画像 –

答えて

1

(私はlubridateパッケージをインストール)』」ymd_hmsを:

library(lubridate) 


#Create a df with dates 

df<-tibble::tibble(
    enrolled_at=as.factor(c("2002-06-09 12:45:40 UTC","2003-01-29 09:30:40 UTC", 
         "2002-09-04 16:45:40 UTC")), 
unenrolled_at=as.factor(c("2002-11-13 20:00:40 UTC", 
         "2002-07-07 17:30:40","2002-07-07 17:30:40 UTC"))) 
df 

# A tibble: 3 x 2 
       enrolled_at   unenrolled_at 
        <fctr>     <fctr> 
1 2002-06-09 12:45:40 UTC 2002-11-13 20:00:40 UTC 
2 2003-01-29 09:30:40 UTC  2002-07-07 17:30:40 
3 2002-09-04 16:45:40 UTC 2002-07-07 17:30:40 UTC 

#Check Class 
class(df$enrolled_at) 

[1] "factor" 

#Check class after function ymd_hms 
class(ymd_hms(df$enrolled_at)) 

[1] "POSIXct" "POSIXt" 

#Calculete de difference in days 
dif<-ymd_hms(df$ unenrolled_at)-ymd_hms(df$enrolled_at) 

#difference like a period 
as.period(dif) 

[1] "157d 7H 15M 0S" "-205d -16H 0M 0S" "-58d -23H -15M 0S" 

#Add as a column in df 
df$newAttributeValue<-as.period(ymd_hms(df$ unenrolled_at)-ymd_hms(df$enrolled_at)) 

df 

# A tibble: 3 x 3 
       enrolled_at   unenrolled_at newAttributeValue 
        <fctr>     <fctr>  <S4: Period> 
1 2002-06-09 12:45:40 UTC 2002-11-13 20:00:40 UTC 157d 7H 15M 0S 
2 2003-01-29 09:30:40 UTC  2002-07-07 17:30:40 -205d -16H 0M 0S 
3 2002-09-04 16:45:40 UTC 2002-07-07 17:30:40 UTC -58d -23H -15M 0S 
関連する問題