0

私は周りを探していましたが、データフレームにあるデータを要約する方法がわかりません(いくつかの範囲があります)。daaply / taaplyまたはtableの組み合わせを適用すると実行できることは知っていますが、期待したとおりの結果を得ることができませんでした。

基本的に私はこれを回したい:

part_no val1 val2 val3
2 1 2 3 45.3
2 1 3 4 -12.3
3 1 3 4 99.3
3 1 5 2 -3.2
3 1 4 3 -55.3

これに:

part_no val3_between0_50 val3_bw50_100 val3_bw-50_0 val3_bw-100_-50
2 1 0 0 1 0
3 0 1 0 1 1

これはダミーデータであり、より多くの行を取得しましたが、考え方は同じです。特定の条件を満たす参加者の値の数を数えたいだけです。

誰かが少しずつ説明していただければ幸いです。私は周りにたくさんの異なる小さな投稿を見ました、しかしどれも正確にこれをしません、そして私の試みは私をそこに半分しか連れて行きませんでした。使用するようtableに、など。

4

1 に答える 1

2

以下のものよりも優れたソリューション(名前変更コードをこのマトリックス結果に移動したい場合は、以下で使用する余分な行は必要ありません):

xtabs(~part_no +cut(val4, breaks=c(-100, -50, 0, 50, 100) ), dat=dat)
 #-------------
       cut(val4, breaks = c(-100, -50, 0, 50, 100))
part_no (-100,-50] (-50,0] (0,50] (50,100]
      2          0       1      1        0
      3          1       1      0        1

最初に試してみてください:.... n少し異なる問題があり、状況に簡単に適応できます。私が遭遇した難しさは、私のソリューションではpart_noが1で始まる必要があることです。後で行ラベルを割り当てることができると思います。または、「part_no」を係数にして、その数値モード値を使用します。

 dat <- read.table(text="part_no val1 val2 val3 val4
 1 1 2 3 -32
 2 1 2 3 45.3
 2 1 3 4 -12.3
 3 1 3 4 99.3
 3 1 5 2 -3.2
 3 1 4 3 -55.3
 ", head=T)

levs= 4; recs <- matrix( c(unique(dat$part_no), 
                           rep(0, levs*length(unique(dat$part_no))) ), 
                        nrow=length(unique(dat$part_no)) )
 recs[ cbind( dat$part_no, 
              1+ findInterval(dat$val4, c(-100, -50, 0, 50, 100) ) )] <- 1
 recs
#------------------------------------
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    1    0    0
[2,]    2    0    1    1    0
[3,]    3    1    1    0    1
#------------------------------------
 colnames(recs) <- c(names(dat)[1] , 
                     paste("val_btwn", 
                            c(-100, -50, 0, 50, 100)[1:4], 
                            c(-100, -50, 0, 50, 100)[2:5], 
                            sep="_") )
 recs
#------------------------------------
     part_no val_btwn_-100_-50 val_btwn_-50_0 val_btwn_0_50 val_btwn_50_100
[1,]       1                 0              1             0               0
[2,]       2                 0              1             1               0
[3,]       3                 1              1             0               1

そして今、私はさらに使用するかもしれないと思うのでcutxtabs次回。実際、それはとてもうまくいきました。私はそれを上に投稿するつもりです。

于 2012-07-06T17:24:24.767 に答える