【问题标题】:Values in single column of dataframe by a certains conditions特定条件下数据框单列中的值
【发布时间】:2018-08-21 00:10:15
【问题描述】:

我有两个数据框,我想“通过一定的条件组合它们”。我的第一个数据框有一周中的平均 Sms(avgSms) (1=Sunday, 2=Monday, 3=Tuesday...) ,小时和分钟:

df1:
       I   | Day_of_week | hour | min |    AvgSms
       #1          1          0     0      12
       #2          1          0     30     20
       #3          1          1     0      19
       #4          1          1     30     11
       #5          1          2     0      12
       #6          1          2     30     7
       ...        ...       ...    ...   ....
       #10         2          0     0      14
       #11         2          0     30     20
       #12         2          1     0      19
       #13         2          1     30     11
       ...        ...       ...    ...   ....
       #222        7         23     30     13

第二个数据帧有时间和短信,像这样:

 df2:       Time           Sms
     1 2012-01-01 00:00:00  10
     2 2012-01-01 00:30:00  11
     3 2012-01-01 01:00:00  13
     4 2012-01-01 01:30:00  10
     5 2012-01-01 02:00:00  7
     6 2012-01-01 02:30:00  3
     7 2012-01-01 03:00:00  3
     8 2012-01-01 03:30:00  2
      .......................
    400 2015-12-31 23:30:00  16

我想添加到数据帧 2,数据帧 1 的各个 avgSms 取决于可变时间是第二个还是第三个以及 x 小时和 y 和分钟。

我想要这样的东西:

         Time           Sms     avg
     1 2012-01-01 00:00:00  10  12 --> 2012-01-01 was Sunday=1, h=0 and min=0
     2 2012-01-01 00:30:00  11  20
     3 2012-01-01 01:00:00  13  19
     4 2012-01-01 01:30:00  10  11
     5 2012-01-01 02:00:00  7   ..
     6 2012-01-01 02:30:00  3
     7 2012-01-01 03:00:00  3
     8 2012-01-01 03:30:00  2
      .......................
    400 2015-12-31 23:30:00  16

【问题讨论】:

    标签: r time aggregate-functions


    【解决方案1】:

    df2 中格式化日期/时间后考虑 merge 并使用这些字段作为 by 值:

    数据

    txt=' I   Day_of_week hour min     AvgSms
    1          1          0     0      12
    2          1          0     30     20
    3          1          1     0      19
    4          1          1     30     11
    5          1          2     0      12
    6          1          2     30     7
    10         2          0     0      14
    11         2          0     30     20
    12         2          1     0      19
    13         2          1     30     11
    222        7         23     30     13'
    
    df1 <- read.table(text=txt, header = TRUE)
    
    txt = '
        Time           Sms
    1 "2012-01-01 00:00:00"  10
    2 "2012-01-01 00:30:00"  11
    3 "2012-01-01 01:00:00"  13
    4 "2012-01-01 01:30:00"  10
    5 "2012-01-01 02:00:00"  7
    6 "2012-01-01 02:30:00"  3
    7 "2012-01-01 03:00:00"  3
    8 "2012-01-01 03:30:00"  2
    '
    df2 <- read.table(text=txt, header = TRUE)
    

    日期/时间转换

    df2$Date <- as.Date(df2$Time, format="%Y-%m-%d")
    df2$Time <- as.POSIXct(df2$Time)
    
    df2$Day_of_week <- as.integer(strftime(df2$Date,format="%w")) + 1
    df2$hour <- as.integer(strftime(df2$Time,format="%H"))
    df2$min <- as.integer(strftime(df2$Time,format="%M"))
    

    合并

    merge(df2, df1[-1], by=c("Day_of_week", "hour", "min"), all.x=TRUE)
    
    #   Day_of_week hour min                Time Sms       Date AvgSms
    # 1           1    0   0 2012-01-01 00:00:00  10 2012-01-01     12
    # 2           1    0  30 2012-01-01 00:30:00  11 2012-01-01     20
    # 3           1    1   0 2012-01-01 01:00:00  13 2012-01-01     19
    # 4           1    1  30 2012-01-01 01:30:00  10 2012-01-01     11
    # 5           1    2   0 2012-01-01 02:00:00   7 2012-01-01     12
    # 6           1    2  30 2012-01-01 02:30:00   3 2012-01-01      7
    # 7           1    3   0 2012-01-01 03:00:00   3 2012-01-01     NA
    # 8           1    3  30 2012-01-01 03:30:00   2 2012-01-01     NA
    

    【讨论】:

    • 坦克很多。我有一个新问题:get_dummies vs categorical data 对于使用机器学习是相同的还是可以相同的?
    • 没问题。至于你的新问题,说的太笼统了。在 R 中,这些类型将被分类为具有不同级别的因子。
    • 我将在交叉验证后提出这个问题:Question
    猜你喜欢
    • 2017-05-06
    • 2020-02-24
    • 1970-01-01
    • 2018-06-20
    • 2016-12-10
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多