这可能是一个非常基本的问题......我有一个简单的数据框,每个课程有不同的观察结果.我希望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))
Run Code Online (Sandbox Code Playgroud)
然后我想要有类似的东西
nrow(DF, by=course)
..返回每个课程的行数.我知道那nrow(DF, by=course)不存在,但还有什么吗?
我使用了子集,但后来我必须定义每个子集.
一个简单的table将告诉你数据中每个课程有多少行.
c(table(DF$course))
# AERO CREDIT SOLAR
# 2 2 1
Run Code Online (Sandbox Code Playgroud)
几乎没有提及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
Run Code Online (Sandbox Code Playgroud)
作为一种值得知道的替代方案,您是否会使用 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
Run Code Online (Sandbox Code Playgroud)
以上值得了解,但理查德的解决方案是最快的。
或者更快(使用理查德的宝贵评论):
> count(DF$course)
x freq
1 AERO 2
2 CREDIT 2
3 SOLAR 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3821 次 |
| 最近记录: |