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手动完成。 或者是否有更少的时间流行方式或技巧我可以处理这个问题:)
谢谢:)
答案 0 :(得分:1)
由于上个月涉及将df_A
加入df_B
,因此最好通过添加一个上一个日期的列来准备df_A
df_B
df_B
1}}。
同样,在从ValueofInterest
获取数据时,它涉及从前一个日期减去df_B
,因此最好通过添加一个存储ValueofInterest
的列来准备year
日期。
由于month
和zoo.yearmon
中已提及日期,因此,我倾向于使用df_A
函数来转换日期。
最后,我们可以加入df_B
和library(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}}