2

私は本当にRの初心者なので、私のコードが皆さんに衝撃を与えたらごめんなさい。私のデータは次のようになります。

   a b c d e f g h i j
t1 0 0 0 0 3 0 0 0 0 0
t2 0 0 0 0 0 6 0 0 0 0
t3 0 0 0 0 0 0 0 0 0 8
t4 0 0 0 0 0 0 0 0 9 0

各行で最大値の列を見つけて、その列から 3 を引いたものから 3 を足したものを取得したいと思います。まさにそれを実行するために、次のスクリプトを作成しました。

M<-c(1)
for (row in 1: length(D[,1])) {
  max<-which.max(D[row,])
  D<-D[,c(max-3,max-2,max-1,max,max+1,max+2,max+3)]
  M<- cbind(M,D)
}
M<-M[,-1]

最大値が行の先頭または末尾に近い列にある場合 (上記の例の行 t3 と t4 など) を除いて、これは機能します。この場合、次のように、7 つの列を最大値の列に近づけたいと思います。

t1 0 0 0 3 0 0 0
t2 0 0 0 6 0 0 0
t3 0 0 0 0 0 0 8
t4 0 0 0 0 0 9 0

助けていただければ幸いです。

dput()サンプルデータのバージョン:

structure(list(a = c(0L, 0L, 0L, 0L), b = c(0L, 0L, 0L, 0L), 
    c = c(0L, 0L, 0L, 0L), d = c(0L, 0L, 0L, 0L), e = c(3L, 0L, 
    0L, 0L), f = c(0L, 6L, 0L, 0L), g = c(0L, 0L, 0L, 0L), h = c(0L, 
    0L, 0L, 0L), i = c(0L, 0L, 0L, 9L), j = c(0L, 0L, 8L, 0L)), .Names = c("a", 
"b", "c", "d", "e", "f", "g", "h", "i", "j"), class = "data.frame",
row.names = c("t1", "t2", "t3", "t4"))
4

1 に答える 1

2

これはうまくいくはずです:

t(apply(D, 
        MARGIN = 1, 
        FUN = function(X) {
            n <- which.max(X)
            i <- seq(min(max(1, n-3), ncol(D)-6), len=7)
            X[i]
        }))
#    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# t1    0    0    0    3    0    0    0
# t2    0    0    0    6    0    0    0
# t3    0    0    0    0    0    0    8
# t4    0    0    0    0    0    9    0

キー列選択ビットが希望どおりに機能することをテストするには、次のことを試してください。

n <- 2
seq(min(max(1, n-3), ncol(D)-6), len=7)
n <- 10
seq(min(max(1, n-3), ncol(D)-6), len=7)
n <- 6
seq(min(max(1, n-3), ncol(D)-6), len=7)
于 2012-06-20T15:17:01.430 に答える