2017-08-07 15 views
0

私はこのようなデータフレームを持っている:同じグループIDを日付で区切るにはどうすればいいですか?

deviceid  date       speed 
325   2016/09/12 07:55:40    50 
325   2016/09/12 08:55:40    90 
325   2016/09/13 06:55:40    40 
325   2016/09/13 09:55:40    90 
325   2016/09/13 08:55:40    69 
325   2016/09/14 08:55:40    99 
5525   2016/09/12 09:55:40    60 
5525   2016/09/12 06:55:40    90 
5525   2016/09/15 03:55:40    63 
4325   2016/09/12 08:55:40    99 
4325   2016/09/12 07:55:40    30 
4325   2016/09/14 10:55:40    70 

は、私は次のようにそれを変更したい:

deviceid    date      speed 
325_12   2016/09/12 07:55:40    50 
325_12   2016/09/12 08:55:40    90 
325_13   2016/09/13 06:55:40    90 
325_13   2016/09/13 08:55:40    69 
325_13   2016/09/13 09:55:40    40 
325_14   2016/09/14 08:55:40    99 
5525_12   2016/09/12 06:55:40    90 
5525_12   2016/09/12 09:55:40    60 
5525_15   2016/09/15 03:55:40    63 
4325_12   2016/09/12 07:55:40    30 
4325_12   2016/09/12 08:55:40    99 
4325_14   2016/09/14 10:55:40    70 

これを行うための主な理由は、その後、私はそれぞれの中の時間をソートしたいですグループ別の日付。したがって、出力は上記のようなものでなければなりません。

答えて

2

これを行うには、pastegsubを使用することができます。

df$deviceid = paste(df$deviceid,gsub("\\d+/\\d+/(\\d+).*","\\1",df$date),sep="_") 
    deviceid    date speed 
1 325_12 2016/09/12 07:55:40 50 
2 325_12 2016/09/12 08:55:40 90 
3 325_13 2016/09/13 06:55:40 40 
4 325_13 2016/09/13 09:55:40 90 
5 325_13 2016/09/13 08:55:40 69 
6 325_14 2016/09/14 08:55:40 99 
7 5525_12 2016/09/12 09:55:40 60 
8 5525_12 2016/09/12 06:55:40 90 
9 5525_15 2016/09/15 03:55:40 63 
10 4325_12 2016/09/12 08:55:40 99 
11 4325_12 2016/09/12 07:55:40 30 
12 4325_14 2016/09/14 10:55:40 70 
+2

「ライブラリ(lubridate);ライブラリ(dplyr); '%d_%d '、deviceid、day(ymd_hms(date)))'時刻の日付の列の場合は正規表現を避ける方が良いでしょう – akrun

3

私たちはあなたを助けるためにdeviceid

paste(df$deviceid, format(as.POSIXct(df$date), "%d"), sep = "_") 

#[1] "325_12" "325_12" "325_13" "325_13" "325_13" "325_14" "5525_12" 
#[8] "5525_12" "5525_15" "4325_12" "4325_12" "4325_14" 
0

でパイプラインコーディングと同じ結果にのみformatを使用して、日付とpasteそれを抽出することができますあなたのワークフロー:

library(lubridate) 
 
library(tidyverse) 
 
library(stringr) 
 

 
df <- data.frame(
 
      deviceid = c(325, 325, 325, 325, 325, 325, 5525, 5525, 5525, 4325, 4325, 
 
         4325), 
 
       date = c("2016/09/12 07:55:40", "2016/09/12 08:55:40", 
 
         "2016/09/13 06:55:40", "2016/09/13 09:55:40", 
 
         "2016/09/13 08:55:40", "2016/09/14 08:55:40", "2016/09/12 09:55:40", 
 
         "2016/09/12 06:55:40", "2016/09/15 03:55:40", 
 
         "2016/09/12 08:55:40", "2016/09/12 07:55:40", "2016/09/14 10:55:40"), 
 
      speed = c(50, 90, 40, 90, 69, 99, 60, 90, 63, 99, 30, 70) 
 
    ) 
 

 

 
df$date <- ymd_hms(df$date) # convert to date format using lubridate 
 

 
df %>% 
 
mutate(deviceid = paste(deviceid, str_sub(year(date), 3, 4), sep = "_"))

関連する問題