26

私は問題があります。データをダウンロードし、日付を 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

どうすれば修正できますか?

アップデート。Date 列のクラスを Character に変更しました。それは問題を解決しました。しかし、データセットのクラスを変更せずに dlyr を使用できますか?

4

3 に答える 3

18

コメントで推奨されているように使用できます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))
于 2016-11-17T04:54:05.400 に答える
0

私がよく使うトリックの 1 つは、次のとおりです。

  1. POSIXt列 (以下の例eventDate) を文字に変換する
  2. 必要な dplyr 操作を実行します (以下の例では、2 つのデータ フレームの行をバインドします)。
  3. ステップ 1 を実行する前と同じように、正しい形式 ( ) とタイムゾーン ( )POSIXtを設定することを忘れずに、文字から元に戻します。formattz

例:

# 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")
于 2018-10-18T18:40:48.937 に答える