3

サンプルの入力データと出力データは次のようになります。基本的に、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)
4

1 に答える 1