Dataframe 根据一个数据帧与另一个数据帧的日期获取差异 数据集A
因此,如果我的列NewColumn中有a(0/1),我想查看列date,然后查看数据集a中今年和上一年的日期,并根据该日期从数据集B中获取相同日期但提前一个月的值,并将差值放入新数据集中 有没有一种简单的编码方法 如果没有,我想我必须自己用excel手动完成。 还是有一种更省时的方法或技巧可以解决这个问题:)Dataframe 根据一个数据帧与另一个数据帧的日期获取差异 数据集A,dataframe,Dataframe,因此,如果我的列NewColumn中有a(0/1),我想查看列date,然后查看数据集a中今年和上一年的日期,并根据该日期从数据集B中获取相同日期但提前一个月的值,并将差值放入新数据集中 有没有一种简单的编码方法 如果没有,我想我必须自己用excel手动完成。 还是有一种更省时的方法或技巧可以解决这个问题:) 谢谢:)因为涉及到上个月,将df_A与df_B合并,因此最好通过添加一列,其中包含可以与df_B合并的上一个日期来准备df_A 类似地,当从dfu B中获取数据时,需要从上一个日期减去Va
谢谢:)因为涉及到上个月,将
df_A
与df_B
合并,因此最好通过添加一列,其中包含可以与df_B
合并的上一个日期来准备df_A
类似地,当从dfu B
中获取数据时,需要从上一个日期减去ValueofInterest
,因此最好通过添加一列存储上一个日期的ValueofInterest
来准备dfu B
由于在年
和月
中提到了日期,因此我更喜欢使用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)
df_A从ValueDatasetB
data.frame选择year
范围的逻辑是什么?请看我提供的答案。在选择上一个日期时,我没有考虑过姓名。如果你的数据有很多名字,你可以考虑在<代码>名称< /代码>上分组。@ BLY12BLU12谢谢更新。第一部分我现在明白了。对于第二部分,您有mentioend减值数据集b(1999-09)
我仍然无法理解?如果它只是上一个值,则偶数2001--01的值可用。为什么我们不能接受呢?@bli12blu12我现在已经更新了我的答案。现在,DateToJoin
是前一个月。例如,对于2001-03
,我应该在df_B中查找2001-02
。值为0.06
。现在我应该查找应该减去的值。如果我查找一年前的值,则表示2000-02。该值为
0.12。因此答案应该是
0.06-0.12`?根据你上面的例子:0.06(2001-02)-0.19(2000-01)=-0.13。。。0.01(2002-01)
我很清楚这一点。甚至0.25(2003-04)
部分也是正确的。没问题。现在,为什么0.19(2000-01)
?同样,为什么“0.01(2002-01)”呢?还不清楚能不能把我们搅乱。
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)