我有两个数据帧,如下所示,
#include<stdio.h>
int main()
{
char a[23];
int i=0,j=0;
printf("enter a single english word: ");
for(a[i]=getchar(); (a[i]!='\n') && (i<23) ; i++)
;
for(j=0;j<i;j++)
putchar(a[j]);
printf("?");
return 0;
}
和
data1
Type date
1 A 2011-10-21
2 A 2011-11-18
3 A 2011-12-16
4 B 2011-10-20
5 B 2011-11-17
6 B 2011-12-15
我想遍历data1的类型(A,B)并检查每个日期并检查data2中类型(A,B)的所有条目,并检查data2中的日期是否在两周之内,然后将值相加并将其作为输出。
我的理想输出是
data2
Date Type value
1 2011-10-25 A 1
2 2011-10-15 A 3
3 2011-11-10 A 4
4 2011-10-23 B 12
5 2011-10-27 B 1
6 2011-11-18 B 1
我可以考虑在R中编写循环并运行。但它运行了很长时间。我想在dplyr中应该有更好的方法来做到这一点。我正在努力而且无法完成它。有人可以帮我这么做吗?
由于
答案 0 :(得分:1)
这看起来怎么样?假设data1
为df1
,data2
为df2
library(dplyr)
library(lubridate)
df3 <- full_join(df1, df2, by = "Type")
df3 <- df3 %>% mutate(date1 = week(date), Date1 = week(Date))
df4 <- df3 %>% mutate(Key = ifelse(((date1 - Date1) %in% c(-2:2)), T, F))
df5 <- df4 %>% filter(Key == T) %>% group_by(Type, date) %>%
summarise(Value = sum(value))
full_join(df1, df5, by = c("Type", "date"))