R 检索月份数据
将“日期”转换为R 检索月份数据,r,date,dplyr,R,Date,Dplyr,将“日期”转换为date类,使用格式提取“YearMonth”,并使用xtabs在base R id 201302 201303 201304 1 xx33 25 0 0 2 xx22 100 0 0 3 xx11 0 30 0 4 xx00 0 0 15 df$monthyear使用tidyverse的另一种方式: df$monthyear <- fo
date
类,使用格式提取“YearMonth”,并使用xtabs
在base R
id 201302 201303 201304
1 xx33 25 0 0
2 xx22 100 0 0
3 xx11 0 30 0
4 xx00 0 0 15
df$monthyear使用tidyverse的另一种方式:
df$monthyear <- format(as.Date(df$date, "%d/%m/%Y"), "%Y%m")
xtabs(amount~ id + monthyear, df)
# monthyear
#id 201302 201303 201304
# xx00 0 0 15
# xx11 0 30 0
# xx22 100 0 0
# xx33 25 0 0
库(tidyverse)
图书馆(lubridate)
df%>%
变化(月\年=格式(dmy(日期),%Y%m”)%>%
分组依据(月\年,id)%>%
汇总(s=总额(金额))%>%
价差(月/年,s,填充=0)
#一个tibble:4x4
id`201302``201303``201304`
*
1 xx00 0 15.0
2 xx11 0 30.0 0
3 xx22 100 0 0
4 xx33 25.0
为了完整起见,这里还有一个解决方案,它使用了dplyr
的前身之一restrape2
包中的dcast()
:
library(tidyverse)
library(lubridate)
df %>%
mutate(month_year = format(dmy(date), "%Y%m")) %>%
group_by(month_year, id) %>%
summarise(s = sum(amount)) %>%
spread(month_year, s, fill = 0)
# A tibble: 4 x 4
id `201302` `201303` `201304`
* <fctr> <dbl> <dbl> <dbl>
1 xx00 0 0 15.0
2 xx11 0 30.0 0
3 xx22 100 0 0
4 xx33 25.0 0 0
我猜这是因为这个问题有一个dplyr标签(尽管没有必要投否决票,而且不是我:-)。。。(我喜欢你简单的回答)
library(tidyverse)
library(lubridate)
df %>%
mutate(month_year = format(dmy(date), "%Y%m")) %>%
group_by(month_year, id) %>%
summarise(s = sum(amount)) %>%
spread(month_year, s, fill = 0)
# A tibble: 4 x 4
id `201302` `201303` `201304`
* <fctr> <dbl> <dbl> <dbl>
1 xx00 0 0 15.0
2 xx11 0 30.0 0
3 xx22 100 0 0
4 xx33 25.0 0 0
library(reshape2)
library(lubridate)
dcast(df, id ~ format(dmy(date), "%Y%m"), sum, value.var = "amount")
id 201302 201303 201304
1 xx00 0 0 15
2 xx11 0 30 0
3 xx22 100 0 0
4 xx33 25 0 0