「開始」という名前の列datetime(DD:MM:yyyy HH:mm:ss)のdfがあり、この列を「date」と「time」という2つの名前に分割したいと思います。
今、私は次のことを試しました:
df$Date <- sapply(strsplit(as.character(df$Start), " "), "[", 1)
df$Time <- sapply(strsplit(as.character(df$Start), " "), "[", 2)
ただし、str(df)関数を使用すると、これは機能します(関心のある変数がほとんど見えるように短くします)。
'data.frame':18363 obs。 19個の変数:
$開始:67レベルの係数「2013-09-01 08:07:41.000」、..:1 1 1 1 1 1 1 1 1 1 1 ...
$間隔:int 47259 47259 47259 47259 47259 47259 47259 47259 47259 47259 ...
$ DateTime:18363レベルのファクター "2013-09-01 08:07:41.350"、..:1 2 3 4 5 6 7 8 9 10 ...
$ TimeSensor:num 158489 158489 158490 158490 158491 ...
だから今は、時間と日付を「ファクター」から「時間」と「日付」に変換する方法を知る必要があるだけです。
誰かが解決策を知っていれば、私は非常に感謝します!私はRに関する初心者なので、火傷しないでください。
どうもありがとう!
この遅い回答でごめんなさい!とにかく、私は大学の誰かから助けを受けて、彼は私のタイムコードの次の、非常に簡単な調整を思い付きました。
df$Date <- as.Date(df$Start) #already got this one from the answers above
df$Time <- format(as.POSIXct(df$Start) ,format = "%H:%M:%S")
これは、ファクターを「日付」と「POSIXct」に変換します。
あなたの助けに感謝します!将来的には何らかの恩恵が得られることを願っていますが、プログラミングに関係するかどうかは疑問です。
どう?
df$Date <- as.Date(df$Start)
df$Time <- format(df$Start,"%H:%M:%S")
列のフォーマットを見ると、as.POSIXctを使用して列を適切にフォーマットし、format()を使用して目的のデータを抽出できます。
これは、DateTime列を分割するときに使用するコードです。
df$Time <- format(as.POSIXct(df$Start,format="%Y:%m:%d %H:%M:%S"),"%H:%M:%S")
df$Date <- format(as.POSIXct(df$Start,format="%Y:%m:%d %H:%M:%S"),"%Y:%m:%d")
本当に必要ではないlapply
ループの使用を避けて、このようなことをすることを好むかもしれません(しかし、それは悪いことでもありません!)...
# If we had this data...
df <- data.frame( Start = c( "13:11:2013 15:39" , "13:11:2013 16:15" , "13:11:2013 17:52" ) )
# We can directly make two columns from the split strings without
# using a loop by call 'do.call'..
new <- do.call( rbind , strsplit( as.character( df$Start ) , " " ) )
# [,1] [,2]
#[1,] "13:11:2013" "15:39"
#[2,] "13:11:2013" "16:15"
#[3,] "13:11:2013" "17:52"
# Cbind them to the original data liek so...
cbind( df , Date = new[,2] , Time = new[,1] )
# Start Date Time
#1 13:11:2013 15:39 15:39 13:11:2013
#2 13:11:2013 16:15 16:15 13:11:2013
#3 13:11:2013 17:52 17:52 13:11:2013
データが1つのdatetime
列と他の多くの列でこれに似ていると仮定します
df <- data.frame(a = 1:5, datetime = as.POSIXct(c('2019-02-01 01:00:00',
'2019-02-01 02:00:00', '2019-02-01 03:00:00',
'2019-02-01 04:00:00', '2019-02-01 05:00:00')))
df
# a datetime
#1 1 2019-02-01 01:00:00
#2 2 2019-02-01 02:00:00
#3 3 2019-02-01 03:00:00
#4 4 2019-02-01 04:00:00
#5 5 2019-02-01 05:00:00
空白(またはその他の区切り文字が存在する場合)で列を分割して、tidyr::separate
tidyr::separate(df, datetime, c("date", "time"), sep = " ")
# a date time
#1 1 2019-02-01 01:00:00
#2 2 2019-02-01 02:00:00
#3 3 2019-02-01 03:00:00
#4 4 2019-02-01 04:00:00
#5 5 2019-02-01 05:00:00
元の列(datetime
)を保持したい場合は、remove = FALSE
。