我有一个数据帧DF.
说DF是:
A B
1 1 2
2 1 3
3 2 3
4 3 5
5 3 6
Run Code Online (Sandbox Code Playgroud)
现在我想通过列A将行组合在一起并得到列B的总和.
例如:
A B
1 1 5
2 2 3
3 3 11
Run Code Online (Sandbox Code Playgroud)
我目前正在使用sqldf函数的SQL查询.但由于某种原因,它非常缓慢.有没有更方便的方法呢?我也可以使用for循环手动完成,但它又慢了.我的SQL查询是"从A组中选择A,计数(B)".
通常,每当我不使用矢量化操作并使用for循环时,即使对于单个过程,性能也非常慢.
A5C*_*2T1 94
这是一个常见的问题.在基地,您正在寻找的选项是aggregate.假设您data.frame被称为"mydf",您可以使用以下内容.
> aggregate(B ~ A, mydf, sum)
A B
1 1 5
2 2 3
3 3 11
Run Code Online (Sandbox Code Playgroud)
我还建议查看"data.table"包.
> library(data.table)
> DT <- data.table(mydf)
> DT[, sum(B), by = A]
A V1
1: 1 5
2: 2 3
3: 3 11
Run Code Online (Sandbox Code Playgroud)
mpa*_*nco 22
使用dplyr:
require(dplyr)
df <- data.frame(A = c(1, 1, 2, 3, 3), B = c(2, 3, 3, 5, 6))
df %>% group_by(A) %>% summarise(B = sum(B))
## Source: local data frame [3 x 2]
##
## A B
## 1 1 5
## 2 2 3
## 3 3 11
Run Code Online (Sandbox Code Playgroud)
用sqldf:
library(sqldf)
sqldf('SELECT A, SUM(B) AS B FROM df GROUP BY A')
Run Code Online (Sandbox Code Playgroud)
小智 9
我建议看一下这个plyr包.它可能没有data.table或其他软件包那么快,但它非常有启发性,特别是在从R开始并且必须进行一些数据操作时.
> DF <- data.frame(A = c("1", "1", "2", "3", "3"), B = c(2, 3, 3, 5, 6))
> library(plyr)
> DF.sum <- ddply(DF, c("A"), summarize, B = sum(B))
> DF.sum
A B
1 1 5
2 2 3
3 3 11
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162856 次 |
| 最近记录: |