30

データフレームに2つの列があります

2010  1
2010  1
2010  2
2010  2
2010  3
2011  1
2011  2

両方の列の頻度をカウントし、この形式で結果を取得したい

  y    m Freq
 2010  1 2
 2010  2 2
 2010  3 1
 2011  1 1
 2011  2 1 
4

7 に答える 7

39

データがdfyを持つデータフレームである場合m

library(plyr)
counts <- ddply(df, .(df$y, df$m), nrow)
names(counts) <- c("y", "m", "Freq")
于 2012-06-04T10:40:28.637 に答える
8

@ughの回答のより慣用的なdata.tableバージョンは次のようになります。

library(data.table) # load package
df <- data.frame(y = c(rep(2010, 5), rep(2011,2)), m = c(1,1,2,2,3,1,2)) # setup data
dt <- data.table(df) # transpose to data.table
dt[, list(Freq =.N), by=list(y,m)] # use list to name var directly
于 2015-05-25T13:40:02.873 に答える
5

使用sqldf:

sqldf("SELECT y, m, COUNT(*) as Freq
       FROM table1
       GROUP BY y, m")
于 2012-06-04T10:11:51.643 に答える
4

多くの列を持つ非常に大きなデータ フレームがある場合、または事前に列名を知らなかった場合は、次のようなものが役立つ場合があります。

library(reshape2)
df_counts <- melt(table(df))
names(df_counts) <- names(df)
colnames(df_counts)[ncol(df_counts)] <- "count"
df_counts    

  y    m     count
1 2010 1     2
2 2011 1     1
3 2010 2     2
4 2011 2     1
5 2010 3     1
6 2011 3     0
于 2012-06-04T14:23:47.110 に答える