我想我正在使用plyr错误.有人可以告诉我这是否是"高效"的plyr代码?
require(plyr)
plyr <- function(dd) ddply(dd, .(price), summarise, ss=sum(volume))
Run Code Online (Sandbox Code Playgroud)
一点背景:我有一些大的聚合问题,我注意到他们每个人都花了一些时间.在尝试解决问题时,我开始对R中各种聚合过程的性能感兴趣.
我测试了一些聚合方法 - 并且发现自己整天都在等待.
当我最终得到结果时,我发现了plyr方法和其他方法之间的巨大差距 - 这让我觉得我做错了.
我运行了以下代码(我以为我在查看时会查看新的数据帧包):
require(plyr)
require(data.table)
require(dataframe)
require(rbenchmark)
require(xts)
plyr <- function(dd) ddply(dd, .(price), summarise, ss=sum(volume))
t.apply <- function(dd) unlist(tapply(dd$volume, dd$price, sum))
t.apply.x <- function(dd) unlist(tapply(dd[,2], dd[,1], sum))
l.apply <- function(dd) unlist(lapply(split(dd$volume, dd$price), sum))
l.apply.x <- function(dd) unlist(lapply(split(dd[,2], dd[,1]), sum))
b.y <- function(dd) unlist(by(dd$volume, dd$price, sum))
b.y.x <- function(dd) unlist(by(dd[,2], dd[,1], sum))
agg <- function(dd) aggregate(dd$volume, list(dd$price), sum)
agg.x <- function(dd) aggregate(dd[,2], list(dd[,1]), sum)
dtd <- function(dd) …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,其中一列是物种的名称,第二列是丰度值.由于采样程序,一些物种出现不止一次(即,其中有多个物种,其中有物种X).我想巩固这些条目并总结它们的丰富程度.
例如,给定此数据框:
set.seed(6)
df=data.frame(
x=c("sp1","sp2","sp3","sp3","sp4","sp2","sp3"),
y=rpois(7,2)); df
Run Code Online (Sandbox Code Playgroud)
产生:
x y
1 sp1 2
2 sp2 4
3 sp3 1
4 sp3 1
5 sp4 3
6 sp2 5
7 sp3 5
Run Code Online (Sandbox Code Playgroud)
我想改为:
x y
1 sp1 2
2 sp2 9 (5+4)
3 sp3 7 (5+1+1)
5 sp4 3
Run Code Online (Sandbox Code Playgroud)
提前感谢您提供的任何帮助!
我有一个大数据框,我想检查一组(因子)变量的值是否唯一标识数据的每一行。
我目前的策略是按我认为是索引变量的变量进行聚合
dfAgg = aggregate(dfTemp$var1, by = list(dfTemp$var1, dfTemp$var2, dfTemp$var3), FUN = length)
stopifnot(sum(dfAgg$x > 1) == 0)
Run Code Online (Sandbox Code Playgroud)
但这个策略需要永远。更有效的方法将不胜感激。
谢谢。
从我的问题的后续行动在这里,我想R中复制的Stata命令的功能duplicates tag,这让我标记的数据集是在重复一组给定的变量条件的所有行:
clear *
set obs 16
g f1 = _n
expand 104
bys f1: g f2 = _n
expand 2
bys f1 f2: g f3 = _n
expand 41
bys f1 f2 f3: g f4 = _n
des // describe the dataset in memory
preserve
sample 10 // draw a 10% random sample
tempfile sampledata
save `sampledata', replace
restore
// append the duplicate rows to the data
append using `sampledata'
sort f1-f4
duplicates tag f1-f4, …Run Code Online (Sandbox Code Playgroud)