这是您可以使用tidyr 和spread 做到这一点的一种方法:
Date <- as.character(Sys.Date()+0:4)
seller <- c ("S1", "S2","S3","S4", "S5")
buyer <- c("B1", "B2", "B3", "B4", "B5")
Food <- c("Coconut","Banana","Peach","Peach","Apple")
df <- data.frame(cbind(Date,seller,buyer,Food),stringsAsFactors=FALSE)
library(tidyr)
df2 <- df%>%
group_by(Date,seller,buyer)%>%
mutate(count=n())%>%
spread(Food,count)
df2[is.na(df2)] <- 0
df2
Source: local data frame [5 x 7]
Groups: Date, seller, buyer [5]
Date seller buyer Apple Banana Coconut Peach
* <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 2017-04-18 S1 B1 0 0 1 0
2 2017-04-19 S2 B2 0 1 0 0
3 2017-04-20 S3 B3 0 0 0 1
4 2017-04-21 S4 B4 0 0 0 1
5 2017-04-22 S5 B5 1 0 0 0
编辑要考虑重复,请添加summarise 步骤。数据集已被修改,使得 S1、B1、香蕉和同一日期发生。
Date <- as.character(Sys.Date()+c(0,0,1,2,3))
seller <- c ("S1", "S1","S3","S4", "S5")
buyer <- c("B1", "B1", "B3", "B4", "B5")
Food <- c("Banana","Banana","Peach","Peach","Apple")
df <- data.frame(cbind(Date,seller,buyer,Food),stringsAsFactors=FALSE)
library(tidyr)
df2 <- df%>%
group_by(Date,seller,buyer,Food)%>%
summarise(count=n())%>%
spread(Food,count)
df2[is.na(df2)] <- 0
df2
Date seller buyer Apple Banana Peach
* <chr> <chr> <chr> <dbl> <dbl> <dbl>
1 2017-04-19 S1 B1 0 2 0
2 2017-04-20 S3 B3 0 0 1
3 2017-04-21 S4 B4 0 0 1
4 2017-04-22 S5 B5 1 0 0