Nombre de fréquences de deux colonnes en R
j'ai deux colonnes dans la base de données
2010 1
2010 1
2010 2
2010 2
2010 3
2011 1
2011 2
je veux compter la fréquence des deux colonnes et obtenir le résultat dans ce format
y m Freq
2010 1 2
2010 2 2
2010 3 1
2011 1 1
2011 2 1
18
demandé sur
Sunny Sunny
2012-06-04 14:04:34
6 réponses
si vos données sont dataframe df
avec des colonnes y
et m
library(plyr)
counts <- ddply(df, .(df$y, df$m), nrow)
names(counts) <- c("y", "m", "Freq")
24
répondu
danas.zuokas
2012-06-04 10:40:28
je n'ai pas vu un dplyr encore de réponse. Le code est plutôt simple.
library(dplyr)
rename(count(df, y, m), Freq = n)
# Source: local data frame [5 x 3]
# Groups: V1 [?]
#
# y m Freq
# (int) (int) (int)
# 1 2010 1 2
# 2 2010 2 2
# 3 2010 3 1
# 4 2011 1 1
# 5 2011 2 1
Données:
df <- structure(list(y = c(2010L, 2010L, 2010L, 2010L, 2010L, 2011L,
2011L), m = c(1L, 1L, 2L, 2L, 3L, 1L, 2L)), .Names = c("y", "m"
), class = "data.frame", row.names = c(NA, -7L))
9
répondu
Rich Scriven
2018-01-31 16:52:20
des données plus idiomatiques.la réponse de @ugh serait:
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
7
répondu
Richard
2016-04-18 23:56:41
si vous aviez un cadre de données très grand avec beaucoup de colonnes ou si vous ne connaissiez pas les noms de colonnes à l'avance, quelque chose comme ceci pourrait être utile:
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
4
répondu
Ben
2012-06-04 14:23:47
en utilisant sqldf
:
sqldf("SELECT y, m, COUNT(*) as Freq
FROM table1
GROUP BY y, m")
4
répondu
Kshitij
2015-06-15 10:35:40
library(data.table)
oldformat <- data.table(oldformat) ## your orignal data frame
newformat <- oldformat[,list(Freq=length(m)), by=list(y,m)]
3
répondu
ugh
2013-01-04 23:15:30