【发布时间】:2013-06-13 23:17:06
【问题描述】:
以下是我的示例输入和输出数据的样子。基本上,我希望使用 R 中的应用函数从几组列中选择底部 1 个百分位记录。选择分别基于我的示例数据中 a.1、b.1 和 c.1 列中的最小值。
我已经为 3 个单独的组手动编码,但想知道是否有一种使用 apply、ddply 函数的有效编码方式?
我一直在尝试编写逻辑。任何指针都非常感谢。
> read.csv('in.csv')
slno a.1 a.2 a.3 b.1 b.2 b.3 c.1 c.2 c.3
1 1 10 34 34 14 1 11 5 2 45
2 2 9 35 35 13 7 17 16 6 46
3 3 12 11 11 12 5 15 13 4 18
4 4 13 13 13 11 6 16 12 8 52
5 5 14 9 9 10 9 19 11 9 36
> read.csv('out.csv')
a.1 a.2 a.3 b.1 b.2 b.3 c.1 c.2 c.3
1 9 35 35 10 9 19 5 2 45
2 10 34 34 11 6 16 11 9 36
示例代码:
d3.a<- subset(input, a.1 < quantile(a.1, prob = 0.01),
select=c(a.1, a.2, a.3))
d3.a<-head(arrange(d3.a,desc(a.1)), n=2)
d3.b<- subset(input, b.1 < quantile(b.1, prob = 0.01),
select=c(b.1, b.2, b.3))
d3.b<-head(arrange(d3.b,desc(b.1)), n=2)
d3.c<- subset(input, c.1 < quantile(c.1, prob = 0.01),
select=c(c.1, c.2, c.3))
d3.c<-head(arrange(d3.c,desc(c.1)), n=2)
out<-cbind(d3.a,d3.b,d3.c)
【问题讨论】:
-
不应该是
a.1 < quantile(...)来获得最底层的1%吗? -
是的,谢谢,进行了编辑。更多的是寻找如何编写应用逻辑的代码。我在我的实际数据集中同时进行前 1% 和后 1% 的操作...
-
将您的数据重塑为长格式.....