基于列值组交叉值

时间:2015-02-14 21:41:59

标签: r

我在R中有以下数据帧(一些样本值)

Account     Year_Month
200         201412
300         201412
200         201411
400         201411
200         201410
400         201410
200         201411
300         201412

我需要了解给定year_months中“帐户”的频率是多少?

例如:

201412(2014年12月)

Account     Frequency count 
300         2
200         1

201412和201411(2014年12月和2014年11月)

Account   Frequency count  
300       2 
200       3 
400       1

我曾尝试在Year_Month上制作一个因素,但这不起作用。我可能缺少什么?有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

#A simple solution is to use `table`. 

with(data,table(Account,Year_Month)) # data is your data frame

        201410 201411 201412
  200      1      2      1
  300      0      0      2
  400      1      1      0
OR
#data.table package
#install.packages("data.table) # if not installed
library(data.table)
dt<-data.table(data)
dt[,list(freq=.N),c("Account","Year_Month")]
   Account Year_Month freq
1:     200     201412    1
2:     300     201412    2
3:     200     201411    2
4:     400     201411    1
5:     200     201410    1
6:     400     201410    1

答案 1 :(得分:0)

听起来你知道一个函数可以为月份提取多个值并提取案例,然后使用table返回R列联表。以列式格式显示由as.data.frame.table函数提供。

 extract_yr.mon <- function(yr,mon,dat=dat){ 
                        table(dat[dat$Year_Month %in% paste0(yr, mon),"Account"])}

 extract_yr.mon(2014, 11:12, dat)
#    200 300 400 
#      3   2   1 

as.data.frame( extract_yr.mon(2014, 11:12, dat) )
#-------------
  Var1 Freq
1  200    3
2  300    2
3  400    1

如果你不喜欢&#34; Var1&#34;你可以在表函数中添加一个名字。选择:

> extract_yr.mon <- function(yr,mon,dat=dat){ table(Account=dat[dat$Year_Month %in% paste0(yr, mon),"Account"])}
> as.data.frame( extract_yr.mon(2014, 11:12, dat) )
  Account Freq
1     200    3
2     300    2
3     400    1