Частота счета двух столбцов в R
32856 просмотра
7 ответа
У меня есть два столбца в кадре данных
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
Автор: Sunny Sunny
Источник
Размещён: 13.11.2019 11:47
Ответы (7)
33 плюса
Если ваши данные - это фрейм данных df
со столбцами y
иm
library(plyr)
counts <- ddply(df, .(df$y, df$m), nrow)
names(counts) <- c("y", "m", "Freq")
Автор: danas.zuokas
Размещён: 04.06.2012 10:40
10 плюса
Я еще не видел ответ dplyr . Код довольно прост.
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
Данные:
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))
Автор: Rich Scriven
Размещён: 19.04.2016 12:09
8 плюса
Более идиоматическая версия data.table ответа @ ugh будет выглядеть так:
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
Автор: Richard
Размещён: 25.05.2015 01:40
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
Автор: Ben
Размещён: 04.06.2012 02:23
4 плюса
Использование sqldf
:
sqldf("SELECT y, m, COUNT(*) as Freq
FROM table1
GROUP BY y, m")
Автор: Kshitij
Размещён: 04.06.2012 10:11
3 плюса
library(data.table)
oldformat <- data.table(oldformat) ## your orignal data frame
newformat <- oldformat[,list(Freq=length(m)), by=list(y,m)]
Автор: ugh
Размещён: 04.01.2013 11:12
3 плюса
Вот простое базовое R
решение с использованием table()
иas.data.frame()
df2 <- as.data.frame(table(df1))
# df2
y m Freq
1 2010 1 2
2 2011 1 1
3 2010 2 2
4 2011 2 1
5 2010 3 1
6 2011 3 0
df2[df2$Freq != 0, ]
# output
y m Freq
1 2010 1 2
2 2011 1 1
3 2010 2 2
4 2011 2 1
5 2010 3 1
Данные
df1 <- 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))
Автор: nghauran
Размещён: 05.03.2019 03:53
Вопросы из категории :
- r Как получить доступ к последнему значению в векторе?
- r Пакеты оптимизации для R
- r Есть ли у R такие операторские операции, как Perl qw ()?
- r Библиотека / инструмент для рисования тройных / треугольных графиков
- r Участки без заголовков / надписей в R
- r Расчет скользящей средней
- r Режим Emacs ESS - вкладка для области комментариев
- r Преобразование данных из многих строк во многие столбцы
- r Проверить, содержит ли вектор данный элемент
- r Поиск всех позиций для нескольких элементов в векторе
- r Разница между скобками [] и двойной скобкой [[]] для доступа к элементам списка или кадра данных
- r Написание функций на R с учетом объема работ
- r Линейная регрессия и группировка по R
- r Как заставить выполнение приостановить, поспать, подождать X секунд в R?
- r Уровни коэффициента отбрасывания в заданном кадре данных
- r Графики рядом с ggplot2
- r Как отсортировать фрейм данных по нескольким столбцам
- r Как объединить (объединить) кадры данных (внутренний, внешний, левый, правый)?
- r Поворотные и интервальные метки на оси ggplot2
- r Как избежать цикла в R: выбор элементов из списка