如何在R中返回每组的行数?

时间:2014-11-26 21:59:41

标签: r

这可能是一个非常基本的问题......我有一个简单的数据框,每个课程有不同的观察结果。我希望R在每门课程中返回行数(在我的情况下等于观察数)。

例如:

DF <- structure(list(age = c(36, 21, 20, 32, 24), course = c("AERO", 
"AERO", "CREDIT", "CREDIT", "SOLAR")), .Names = c("age", "course"), class = "data.frame", row.names = c(NA, 
-5L))

然后我想要像

这样的东西

nrow(DF, by=course)

..返回每门课程的行数。我知道nrow(DF, by=course)不存在,但还有什么吗?

我使用过子集,但后来我必须定义每个子集。

4 个答案:

答案 0 :(得分:7)

简单的table会告诉您数据中每个课程有多少行。

c(table(DF$course))
# AERO CREDIT  SOLAR 
#    2      2      1 

答案 1 :(得分:7)

现在几乎没有提及data.table它的速度,内存效率和紧凑的语法(尽管可能需要一些时间来习惯)。

library(data.table)
setDT(DF)             # convert data.frame to data.table
DF[, .N, by=course]   

#    course N
# 1:   AERO 2
# 2: CREDIT 2
# 3:  SOLAR 1

答案 2 :(得分:4)

作为替代值得知道你是否会使用plyr库进入R:

library(plyr)
rows_course = ddply(DF, c("course"), summarise, nrows = length(course))

> rows_course
  course nrows
1   AERO     2
2 CREDIT     2
3  SOLAR     1

以上是值得了解的,但理查德的解决方案是最快的。

或更快(使用理查德的宝贵评论):

> count(DF$course)
       x freq
1   AERO    2
2 CREDIT    2
3  SOLAR    1

答案 3 :(得分:0)

这种简单的代码是获取每个因子的行数的一种非常简单的方法

n_1 = nrow(mydata[mydata$A==1,])