根据另一个数据帧的日期从一个数据框中获取差异

时间:2018-06-01 22:14:02

标签: dataframe

数据集A

Name  Date    Value  change  year NewColumn
A     2000-02   0.5  NA      2000        NA
A     2001-03   0.4  -0.200  2001         0
A     2002-02   1     1.5    2002         1
A     2003-05   0.9  -0.100  2003         0
A     2004-06   0.9   0      2004        NA
A     2006-03   0.4  -0.556  2006        NA

所以basicalley我想查看列日期,如果我的列NewColumn中有一个(0/1),然后从我的数据集A查看今年和上一年的日期,并根据这些值来看来自数据集B的相同日期,但提前一个月,并将差异放在我的新数据集中。

有没有办法轻松编码?

如果没有,我想我必须自己使用excel手动完成。 或者是否有更少的时间流行方式或技巧我可以处理这个问题:)

谢谢:)

1 个答案:

答案 0 :(得分:1)

由于上个月涉及将df_A加入df_B,因此最好通过添加一个上一个日期的列来准备df_A df_B df_B 1}}。

同样,在从ValueofInterest获取数据时,它涉及从前一个日期减去df_B,因此最好通过添加一个存储ValueofInterest的列来准备year日期。

由于monthzoo.yearmon中已提及日期,因此,我倾向于使用df_A函数来转换日期。

最后,我们可以加入df_Blibrary(zoo) library(dplyr) # First prepaer df_A to join df_A %>% mutate(Date = as.yearmon(Date, "%Y-%m")) %>% arrange(Date) %>% mutate(DateToJoin = Date - (1/12)) %>% # The previous month for joining left_join(df_B %>% mutate(DateToJoin = as.yearmon(paste0(year, month),"%Y%m")) %>% arrange(DateToJoin) %>% mutate(valueToDeduct = lag(ValueofInterest)), by = "DateToJoin") %>% mutate(Difference = ifelse(is.na(NewColumn), NA , ValueofInterest-valueToDeduct)) %>% select(Name, Date, Value, change, year= year.x, NewColumn, Difference) # Name Date Value change year NewColumn Difference # 1 A Feb 2000 0.5 NA 2000 NA NA # 2 A Mar 2001 0.4 -0.200 2001 0 0.01 # 3 A Feb 2002 1.0 1.500 2002 1 -0.07 # 4 A May 2003 0.9 -0.100 2003 0 0.10 # 5 A Jun 2004 0.9 0.000 2004 NA NA # 6 A Mar 2006 0.4 -0.556 2006 NA NA 以获得结果:

df_A <- read.table(text = 
"Name  Date    Value  change  year NewColumn
A     2000-02   0.5  NA      2000        NA
A     2001-03   0.4  -0.200  2001         0
A     2002-02   1     1.5    2002         1
A     2003-05   0.9  -0.100  2003         0
A     2004-06   0.9   0      2004        NA
A     2006-03   0.4  -0.556  2006        NA",
header=TRUE, stringsAsFactors = FALSE)


df_B <- read.table(text = 
"year      month   ValueofInterest    
1999        12       0.05
2000        1        0.19          
2000        2        0.12   
2000        3        0.07
2000        4        0.11   
2000        5        0.12
2000        6        0.12
2001        1       0.05
2001        2       0.06
2001        3       0.08
2002        1       0.01
2002        2       0.07
2002        3       0.05
2003        1       0.00
2003        2       0.03
2003        3       0.15
2003        4       0.25
2003        5       0.64
2008        11       0.15
2008        12       0.03",
header = TRUE, stringsAsFactors = FALSE)

数据:

{{1}}