这可能是一个非常基本的问题......我有一个简单的数据框,每个课程有不同的观察结果。我希望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)
不存在,但还有什么吗?
我使用过子集,但后来我必须定义每个子集。
答案 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,])