私は問題があります。データと変換された日付をPOSIXlt形式でダウンロードしました
_df<-read.csv("007.csv", header=T, sep=";")
df$transaction_date<-strptime(df$transaction_date, "%d.%m.%Y")
df$install_date<-strptime(df$install_date, "%d.%m.%Y")
df$days<- as.numeric(difftime(df$transaction_date,df$install_date, units = "days"))
_
データフレームは、1つのオンラインゲームでのトランザクションに関するものです。値(その支払い)、transaction_date、intall_date、IDが含まれます。インストール後数日で表示される新しい列を追加しました。 dlyrを使用してデータを要約しようとしました
df2<-df %>% group_by(days) %>% summarise(sum=sum(value))
エラーが発生しました:エラー:列 'transaction_date'にサポートされていないタイプがあります:POSIXlt、POSIXt
どうすれば修正できますか?
UPD。日付列のクラスを文字に変更しました。問題を解決しました。しかし、データセットのクラスを変更せずにdlyrを使用できますか?
as.POSIXct
コメントで推奨されていますが、時間、分、秒が重要でない場合は、as.Date
df <- read.csv("007.csv", header=T, sep=";")
df2 <- df %>%
mutate(
transaction_date = as.Date(transaction_date, "%d.%m.%Y")
,install_date = as.Date(install_date, "%d.%m.%Y")
) %>%
group_by(days = transaction_date - install_date) %>%
summarise(sum=sum(value))
前述のように here は、これがTidyverseの「機能」です。 POSIXlt
オブジェクトはベクター内のある種のリストであるため、処理したくありません。ただし、as.POSIXct
は常にオプションとは限りません。私の場合、クリーンアップされていないデータを処理するためにPOSIXlt
クラスが本当に必要でした。その場合は、古き良き安定したベースRに戻ってください。あなたの場合:
df2 <- aggregate(df1$value, by=list(df$days), sum)
私がよく使う1つのトリックは次のとおりです。
POSIXt
列(以下の例ではeventDate
)を文字に変換しますPOSIXt
に変換して、正しい形式(format
)とタイムゾーン(tz
)を設定することを忘れないでください。例:
# step 1
df1$eventDate <- as.character.POSIXt(df1$eventDate)
df2$eventDate <- as.character.POSIXt(df2$eventDate)
#step 2
merged_df <- bind_rows(df1, df2)
#step 3
merged_df$eventDate <- strptime(merged_df$eventDate, format = "%Y-%m-%d", tz = "UTC")