2017-02-17 10 views
-4

ので、dataは、データフレームは、多くの列で構成されており、のいずれかがlpep_pickup_datetime「は2016年1月1日12時39分三十六秒AM」の形式で日付と時間を持っていると呼ばれるデータフレームの列を効率的に反復処理する方法は?

私はこれらを分析しますデータは日付と時刻で表示されるので、pickup_dateという名前の新しい列を作成しようとしています。pickup_timeという名前のAMまたはPM情報を持つ列を作成しようとしています。

strsplit関数を使用して文字列を次の形式に分割しました。c( "01/01/2016"、 "12:29:24"、 "AM")、私は前述のこのデータの列。

私は、次のコードを書いている:それはデータの90181行を反復処理するために時間がかかりすぎるよう

data$lpep_pickup_datetime=strsplit(data$lpep_pickup_datetime, " ") 

data$pickup_date=data$lpep_pickup_datetime[[1]][1] 


for (i in seq(1,90181)) 
{ 
    data$pickup_time[i]=data$lpep_pickup_datetime[[i]][2] 
} 

これは、重々しく非効率的です。このタスクを達成するためのより良い方法はありますか?

ありがとうございました。 base R

+0

小さな再生可能な例と期待される出力を示してください。 – akrun

+0

'dplyr'パッケージから' separate() 'と' unite() 'をチェックアウトします。 – Aramis7d

+1

datetimeをPOSIXctのようなdatetimeクラスに解析すると、本当に必要なときに部品を抽出することができます。 – alistaire

答えて

1

?apply(df, 2, function(...))を作成することができ、列を反復処理の通常の方法です。しかし、ここでそれを行う必要はありません

> df<-data.frame("datetime" = format(seq(c(ISOdate(2000,3,20)), by = "day", length.out = 100000), "%Y-%m-%d %r"), stringsAsFactors=FALSE) 
> str(df) 
'data.frame': 100000 obs. of 1 variable: 
$ datetime: chr "2000-03-20 08:00:00 PM" "2000-03-21 08:00:00 PM" "2000-03-22 08:00:00 PM" "2000-03-23 08:00:00 PM" ... 
> df$dateonly<-format(as.Date(df$datetime, format="%Y-%m-%d %r"),"%Y-%m-%d") 
> head(df) 
       datetime dateonly 
1 2000-03-20 08:00:00 PM 2000-03-20 
2 2000-03-21 08:00:00 PM 2000-03-21 
3 2000-03-22 08:00:00 PM 2000-03-22 
4 2000-03-23 08:00:00 PM 2000-03-23 
5 2000-03-24 08:00:00 PM 2000-03-24 
6 2000-03-25 08:00:00 PM 2000-03-25 
+0

私のフォーマットは' 01/01/2016 12:39:36 AM'の形式なので、あなたのコードを 'data $ pickup_date <-format(as .Date(データ$ lpep_pickup_datetime、format = "%m-%d-%y%r")、 "%m-%d-%y") 'となりますが、結果はNAの束です。 – user101998

+0

あなたは不注意でした。あなたの書式は '%m /%d /%Y%r'です。 – Jean

1

、我々は区切り文字を作成するためにsubを使用し、read.csvを持つ2つの列

data[paste0("pickup_", c("date", "time"))] <- read.csv(text=sub("\\s+", 
     ",", data$lpep_pickup_datetime), header=FALSE, stringsAsFactors=FALSE) 
+0

paste0の括弧が一致していないと思います。また、それは私にこのエラーメッセージを与えています: "[.data.table'(x、i、= TRUE)のエラー: 私がdata.table(または文字ベクトル)のとき、 'on ='引数(?data.tableを参照)を使用するか、xをキーする(ソートされ、ソートされたとマークされていますか?setkeyを参照)キー指定されたジョインは、 RAMでソートされます。 " – user101998

+0

@ user101998はい、あなたは正しいです。 ')'を忘れてしまいました..修正しました。あなたのデータセットが 'data.table'の場合、構文は異なります – akrun

関連する問題