データフレームに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
データフレームに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
データがdf
列y
を持つデータフレームである場合m
library(plyr)
counts <- ddply(df, .(df$y, df$m), nrow)
names(counts) <- c("y", "m", "Freq")
@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
使用sqldf
:
sqldf("SELECT y, m, COUNT(*) as Freq
FROM table1
GROUP BY y, m")
多くの列を持つ非常に大きなデータ フレームがある場合、または事前に列名を知らなかった場合は、次のようなものが役立つ場合があります。
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