我有一个大的data.frame,我希望能够通过其中一个变量使用分位数子集来减少它。例如:
x <- c(1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10)
df <- data.frame(x,rnorm(100))
df2 <- subset(df, df$x == 1)
df3 <- subset(df2, df2[2] > quantile(df2$rnorm.100.,0.8))
我最想得到的是一个data.frame,其中包含x = 1,2,3 ... 10的所有分位数。
有没有办法用ddply做到这一点?
答案 0 :(得分:3)
你可以尝试:
ddply(df, .(x), subset, rnorm.100. > quantile(rnorm.100., 0.8))
关于主题:您可以使用df <- data.frame(x,y=rnorm(100))
即时命名列。
答案 1 :(得分:2)
这是使用少量ave()命令的不同方法。 (以这种方式计算速度非常快)
创建一个新列,其中包含x
每个级别的分位数计算df$quantByX <- ave(df$rnorm.100., df$x, FUN = function (x) quantile(x,0.8))
选择新列和x列的项目。
df2 <- unique(df[,c(1,3)])
结果是一个数据框,其中包含x列中的唯一项目以及每个x级别的计算分位数。