Jas*_*ald 36 r rowcount dataframe
我有一个这样的数据框R:
ID MONTH-YEAR VALUE
110 JAN. 2012 1000
111 JAN. 2012 2000
. .
. .
121 FEB. 2012 3000
131 FEB. 2012 4000
. .
. .
Run Code Online (Sandbox Code Playgroud)
因此,每年的每个月都有n行,它们可以按任何顺序排列(意味着它们都不是连续的并且处于休息状态).我想计算每个行的行数,MONTH-YEAR即JAN有多少行.2012年,FEB有多少人.2012年等等.像这样的东西:
MONTH-YEAR NUMBER OF ROWS
JAN. 2012 10
FEB. 2012 13
MAR. 2012 6
APR. 2012 9
Run Code Online (Sandbox Code Playgroud)
我试着这样做:
n_row <- nrow(dat1_frame %.% group_by(MONTH-YEAR))
Run Code Online (Sandbox Code Playgroud)
但它不会产生所需的输出.我怎么能这样做?
Hea*_*ead 44
该count()函数plyr你想要做什么:
library(plyr)
count(mydf, "MONTH-YEAR")
Run Code Online (Sandbox Code Playgroud)
A5C*_*2T1 33
这是一个示例,显示了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
Run Code Online (Sandbox Code Playgroud)
以下是两种输出显示格式的每组行数的计算:
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
Run Code Online (Sandbox Code Playgroud)
And*_*ton 13
使用Ananda dummied的示例数据集aggregate(),这是一个使用的示例,它是核心R的一部分.aggregate()只需要将某些东西计算为不同值的函数MONTH-YEAR.在这种情况下,我用作VALUE计算的东西:
aggregate(cbind(count = VALUE) ~ MONTH.YEAR,
data = mydf,
FUN = function(x){NROW(x)})
Run Code Online (Sandbox Code Playgroud)
哪个给你..
MONTH.YEAR count
1 FEB. 2012 2
2 JAN. 2012 2
3 MAR. 2012 1
Run Code Online (Sandbox Code Playgroud)
小智 7
尝试在dplyr中使用count函数:
library(dplyr)
dat1_frame %>%
count(MONTH.YEAR)
Run Code Online (Sandbox Code Playgroud)
我不确定你是如何将MONTH-YEAR作为变量名称的.我的R版本不允许这样的变量名,所以我用MONTH.YEAR替换它.
作为旁注,代码中的错误是dat1_frame %.% group_by(MONTH-YEAR)没有summarise函数返回原始数据框而没有任何修改.所以,你想要使用
dat1_frame %>%
group_by(MONTH.YEAR) %>%
summarise(count=n())
Run Code Online (Sandbox Code Playgroud)
library(plyr)
ddply(data, .(MONTH-YEAR), nrow)
Run Code Online (Sandbox Code Playgroud)
如果"MONTH-YEAR"是一个变量,这将给你答案.首先,尝试唯一(数据$ 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
Run Code Online (Sandbox Code Playgroud)