Sai*_*lli 6 datetime r dataframe dplyr
干杯,我有两个数据框,具有以下结构.
DF1:
Airlines HeadQ Date Cost_Index
American PHX 07-31-2016 220
American ATL 08-31-2016 150
American ATL 10-31-2016 150
Delta ATL 10-31-2016 180
American ATL 08-31-2017 200
Run Code Online (Sandbox Code Playgroud)
第二数据帧DF2具有以下结构:
DF2:
Airlines HeadQ Date
American ATL 09-30-2016
Delta ATL 03-31-2017
Run Code Online (Sandbox Code Playgroud)
现在查看数据帧DF1和DF2,我想将DF1改为以下数据帧.
DF1:
Airlines HeadQ Date Cost_Index
American PHX 07-31-2016 220
American ATL 08-31-2016 0
American ATL 10-31-2016 150
Delta ATL 10-31-2016 180
American ATL 08-31-2017 200
Run Code Online (Sandbox Code Playgroud)
条件是,从DF2查找DF1的航空公司和HeadQ,如果DF1 $ Date <DF2 $ Date,则将Cost_Index设为0,否则继续使用Cost_Index.
我尝试了,但未成功,:
DF1$Cost_Index <- ifelse(DF1$Airlines == DF2$Airlines & DF1$HeadQ == DF2$HeadQ
& DF1$Date < DF2$Date, 0, DF1$Cost_Index)
Warning:
1: In DF1$Airlines == DF2$Airlines : longer object
length is not a multiple of shorter object length".
2: In<=.default(DF1$Date, DF2$Date) : longer object length is not a
multiple of shorter object length
DF1:
Airlines HeadQ Date Cost_Index
American PHX 07-31-2016 220
American ATL 08-31-2016 0
American ATL 10-31-2016 0
Delta ATL 10-31-2016 0
American ATL 08-31-2017 200
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?
注意:
str(DF1$Date): Date, format: "2016-10-31"
str(DF2$Date): Date, format: "2016-08-31"
Run Code Online (Sandbox Code Playgroud)
Aru*_*run 14
使用 条件连接功能(自1.9.8),我将按如下方式执行此操作:
require(data.table) # v1.9.8+
# convert to data.tables, and Date column to Date class.
setDT(df1)[, Date := as.Date(Date, format = "%m-%d-%Y")]
setDT(df2)[, Date := as.Date(Date, format = "%m-%d-%Y")]
df1[df2, on = .(Airlines, HeadQ, Date < Date), # find matching rows based on condition
Cost_Index := 0L] # update column with 0 for those rows
df1
# Airlines HeadQ Date Cost_Index
# 1: American PHX 2016-07-31 220
# 2: American ATL 2016-08-31 0
# 3: American ATL 2016-10-31 150
# 4: Delta ATL 2016-10-31 180
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
627 次 |
| 最近记录: |