特定条件下数据框单列中的值
Posted
技术标签:
【中文标题】特定条件下数据框单列中的值【英文标题】: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
【问题讨论】:
【参考方案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以上是关于特定条件下数据框单列中的值的主要内容,如果未能解决你的问题,请参考以下文章