次のようなR
にデータフレームがあります。
ID MONTH-YEAR VALUE
110 JAN. 2012 1000
111 JAN. 2012 2000
. .
. .
121 FEB. 2012 3000
131 FEB. 2012 4000
. .
. .
そのため、各年の各月にはn
行があり、任意の順序にすることができます(すべてが連続しておらず、休憩していることを意味します)。各MONTH-YEAR
の行数、つまりJANの行数を計算します。 2012年、FEBの数。 2012など。このようなもの:
MONTH-YEAR NUMBER OF ROWS
JAN. 2012 10
FEB. 2012 13
MAR. 2012 6
APR. 2012 9
私はこれをやろうとしました:
n_row <- nrow(dat1_frame %.% group_by(MONTH-YEAR))
しかし、それは目的の出力を生成しません。
table(.)
(または、希望する出力により厳密に一致するdata.frame(table(.))
が、あなたが求めているように聞こえる方法をどのように行うかを示す例があります。
また、他のユーザーがコピーしてセッションに貼り付けられるように、再現可能なサンプルデータを共有する方法にも注意してください。
以下は(再現可能な)サンプルデータです。
mydf <- structure(list(ID = c(110L, 111L, 121L, 131L, 141L),
MONTH.YEAR = c("JAN. 2012", "JAN. 2012",
"FEB. 2012", "FEB. 2012",
"MAR. 2012"),
VALUE = c(1000L, 2000L, 3000L, 4000L, 5000L)),
.Names = c("ID", "MONTH.YEAR", "VALUE"),
class = "data.frame", row.names = c(NA, -5L))
mydf
# ID MONTH.YEAR VALUE
# 1 110 JAN. 2012 1000
# 2 111 JAN. 2012 2000
# 3 121 FEB. 2012 3000
# 4 131 FEB. 2012 4000
# 5 141 MAR. 2012 5000
以下は、2つの出力表示形式でのグループごとの行数の計算です。
table(mydf$MONTH.YEAR)
#
# FEB. 2012 JAN. 2012 MAR. 2012
# 2 2 1
data.frame(table(mydf$MONTH.YEAR))
# Var1 Freq
# 1 FEB. 2012 2
# 2 JAN. 2012 2
# 3 MAR. 2012 1
plyr
のcount()
関数は、必要なことを行います。
library(plyr)
count(mydf, "MONTH-YEAR")
Dplyrでcount関数を使用してみてください。
library(dplyr)
dat1_frame %>%
count(MONTH.YEAR)
MONTH-YEARを変数名としてどのように取得したかわかりません。私のRバージョンでは、このような変数名を使用できないため、MONTH.YEARに置き換えました。
副次的な注意点として、コードの間違いは、summarise
関数なしのdat1_frame %.% group_by(MONTH-YEAR)
が変更なしで元のデータフレームを返すことでした。だから、使用したい
dat1_frame %>%
group_by(MONTH.YEAR) %>%
summarise(count=n())
library(plyr)
ddply(data, .(MONTH-YEAR), nrow)
「MONTH-YEAR」が変数の場合、これにより答えが得られます。まず、unique(data $ MONTH-YEAR)を試して、一意の値(重複なし)が返されるかどうかを確認します。
次に、上記の単純なsplit-apply-combineは、探しているものを返します。
Data.tableソリューションを完成させるためだけに:
library(data.table)
mydf <- structure(list(ID = c(110L, 111L, 121L, 131L, 141L),
MONTH.YEAR = c("JAN. 2012", "JAN. 2012",
"FEB. 2012", "FEB. 2012",
"MAR. 2012"),
VALUE = c(1000L, 2000L, 3000L, 4000L, 5000L)),
.Names = c("ID", "MONTH.YEAR", "VALUE"),
class = "data.frame", row.names = c(NA, -5L))
setDT(mydf)
mydf[, .(`Number of rows` = .N), by = MONTH.YEAR]
MONTH.YEAR Number of rows
1: JAN. 2012 2
2: FEB. 2012 2
3: MAR. 2012 1
次のようなdf_dataデータフレームがあるとします
> df_data
ID MONTH-YEAR VALUE
1 110 JAN.2012 1000
2 111 JAN.2012 2000
3 121 FEB.2012 3000
4 131 FEB.2012 4000
5 141 MAR.2012 5000
MONTH-YEAR列でグループ化されたdf_dataの行数をカウントするには、次を使用できます。
> summary(df_data$`MONTH-YEAR`)
FEB.2012 JAN.2012 MAR.2012
2 2 1
aggregate
を使用してグループごとに行をカウントする別の方法を次に示します。
my.data <- read.table(text = '
month.year my.cov
Jan.2000 Apple
Jan.2000 pear
Jan.2000 Peach
Jan.2001 Apple
Jan.2001 Peach
Feb.2002 pear
', header = TRUE, stringsAsFactors = FALSE, na.strings = NA)
rows.per.group <- aggregate(rep(1, length(my.data$month.year)),
by=list(my.data$month.year), sum)
rows.per.group
# Group.1 x
# 1 Feb.2002 1
# 2 Jan.2000 3
# 3 Jan.2001 2