1

以前に時刻と日付を1つの列(タイムスタンプと呼ばれる)に統合したデータフレームに取り組んでいます。

a <-c(1:21)
D <- c("2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14")
Time <- c("18:40:37", "18:40:48", "18:40:58", "18:41:08","18:41:18","18:41:28","18:41:38","18:41:48","18:41:58","18:42:08","18:42:18","18:42:28","18:42:38","18:42:48","18:42:58","18:43:08","18:43:18","18:42:28", "18:44:18", "18:44:28", "18:44:28")
df1 <- data.frame(a, D, Time)
df1 <- within(df1, { timestamp=format(as.POSIXct(paste(D, Time)), "%d/%m/%Y %H:%M:%S") })

特定の時点以降の値を除外するためにデータフレームをサブセット化するにはどうすればよいですか?Stackoverflowで、役立つと思われる同様の質問のコードを見つけましたが、時間要素を機能させるのに苦労しています。

subset(df1, format.Date(timestamp, ""%d/%m/%Y %H:%M:%S"") >"14/12/2012 18:42:00")

アドバイスをいただければ幸いです。

編集:私は実際のデータで動作する以下の詳細なコードを取得するのに苦労しています。私のデータフレームの最初の4行のdput()は、この投稿の最後にリストされています。以前は、@Arunが推奨するコード行を使用してデータにタイムスタンプを付けていました。

gps <- within(gps, { timestamp=format(as.POSIXct(paste(LOCAL.DATE, LOCAL.TIME)), 
+                                       "%d/%m/%Y %H:%M:%S") })

コードの2番目の部分(strptime ...)を適用しようとすると、エラーメッセージが表示されます:Error in $<-.data.frame*tmp*、 "timestamp"、value = list(sec = c(37、:replacement has 30208 rows、data has 4この種の説明は、データ全体にコードを適用しようとすると、コンマで区切られた8行の多くの数値が表示されます。何らかの形で私を助けていただければ、非常にありがたいです。

structure(list(timestamp = c("14/12/2012 18:40:37", "14/12/2012 18:40:48", 
"14/12/2012 18:40:58", "14/12/2012 18:41:08"), LATITUDE = c(54.77769505, 
54.77765729, 54.77768751, 54.7777021), LONGITUDE = c(-1.56627049, 
-1.56639255, -1.56626555, -1.56662523), HEIGHT = c(" 173.911 M", 
" 161.742 M", " 146.905 M", " 138.016 M"), SPEED = c(" 0.465 km/h", 
" 0.728 km/h", " 4.574 km/h", " 17.335 km/h")), .Names = c("timestamp", 
"LATITUDE", "LONGITUDE", "HEIGHT", "SPEED"), row.names = c(NA, 
4L), class = "data.frame")

2番目の編集:解決策を提供してくれた@Arunに感謝します。データは元々日付と時刻の列(LOCAL.DATEとLOCAL.TIME)にあるため、コードをどのように使用するのか少し混乱しました。そのため、元のソリューションのコードの最初の行を使用し、次に改訂された編集の2行目を使用しました。

これは私が使用したコードです:

gps <- within(gps, { timestamp=format(as.POSIXct(paste(LOCAL.DATE, LOCAL.TIME)), 
                                      "%d/%m/%Y %H:%M:%S") })

gps$timestamp <- strptime(gps$timestamp, "%Y-%m-%d %H:%M:%S")

しかし今、私は一連のNA(およびいくつかの-1)を取得します。コードを間違った方法で使用した場合はお詫びします...

混乱@Arunの3番目の編集謝罪。日付列を双方向で試してみると、エラーが発生します。元のデータがどのようにフォーマットされたかをyr/m / dとして保持すると、次のdput()が得られます。

structure(list(timestamp = c("2012/12/14 18:40:37", "2012/12/14 18:40:48", 
"2012/12/14 18:40:58", "2012/12/14 18:41:08"), LATITUDE = c(54.77769505, 
54.77765729, 54.77768751, 54.7777021), LONGITUDE = c(-1.56627049, 
-1.56639255, -1.56626555, -1.56662523), HEIGHT = c(" 173.911 M", 
" 161.742 M", " 146.905 M", " 138.016 M"), SPEED = c(" 0.465 km/h", 
" 0.728 km/h", " 4.574 km/h", " 17.335 km/h")), .Names = c("timestamp", 
"LATITUDE", "LONGITUDE", "HEIGHT", "SPEED"), row.names = c(NA, 
4L), class = "data.frame")

次に使用する場合:

gps2$timestamp <- strptime(gps2$timestamp, "%Y/%m/%d %H:%M:%S")

...そしてRStudioのワークスペースウィンドウでデータフレームを表示しようとすると、Rセッションが中止されます。

4

1 に答える 1

3

stringsAsFactors = FALSE(以下に示すように)を使用して要素ではなく、文字ベクトルをそのままロードすることをお勧めします。

# make sure character columns are not converted to factors
df1 <- data.frame(a, D, Time, stringsAsFactors = FALSE)

それで、

df1 <- within(df1, { timestamp=format(as.POSIXct(paste(D, Time)), 
                               "%d/%m/%Y %H:%M:%S") })
# convert timestamp here
df1$timestamp <- strptime(df1$timestamp, "%d/%m/%Y %H:%M:%S")

今、この方法でサブセットを試してください:

# now subset
subset(df1, timestamp > strptime("14/12/2012 18:42:00", "%d/%m/%Y %H:%M:%S"))


#     a          D     Time           timestamp
# 10 10 2012/12/14 18:42:08 2012-12-14 18:42:08
# 11 11 2012/12/14 18:42:18 2012-12-14 18:42:18
# 12 12 2012/12/14 18:42:28 2012-12-14 18:42:28
# 13 13 2012/12/14 18:42:38 2012-12-14 18:42:38
# 14 14 2012/12/14 18:42:48 2012-12-14 18:42:48
# 15 15 2012/12/14 18:42:58 2012-12-14 18:42:58
# 16 16 2012/12/14 18:43:08 2012-12-14 18:43:08
# 17 17 2012/12/14 18:43:18 2012-12-14 18:43:18
# 18 18 2012/12/14 18:42:28 2012-12-14 18:42:28
# 19 19 2012/12/14 18:44:18 2012-12-14 18:44:18
# 20 20 2012/12/14 18:44:28 2012-12-14 18:44:28
# 21 21 2012/12/14 18:44:28 2012-12-14 18:44:28

編集:これを試してください:

df1 <- within(df1, { timestamp=as.POSIXct(timestamp, format = "%d/%m/%Y %H:%M:%S") })
df1$timestamp <- strptime(df1$timestamp, "%Y-%m-%d %H:%M:%S")
于 2013-02-06T12:54:33.853 に答える