在一个data.frame中创建多个子集(可能使用ddply)

时间:2010-07-30 10:28:39

标签: r

我有一个大的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做到这一点?

2 个答案:

答案 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级别的计算分位数。