-1

ここで @redmode から学んだ方法について、補足的な質問をしています。

R の異なるデータ フレームの値に基づくサブセット化

サブセット化するレベルを動的に調整しようとすると、次のようになります。

N <- nrow(A)
cond <- sapply(3:N, function(i) sum(A[i,] > 0.95*B[i,])==2)
rbind(A[1:2,], subset(A[3:N,], cond))

エラーが発生する

Error in FUN(left, right) : non-numeric argument to binary operator. 

B の値の 95% を超える A の値に関連する行を取得する方法を考えてもらえますか? ありがとうございました。

これは、A と B が使用するコードです。

A <- structure(list(name1 = c("trt", "0", "1", "10", "1", "1", "10"
), name2 = c("ctrl", "3", "1", "1", "1", "1", "10")), .Names = c("name1", 
"name2"), row.names = c("cond", "hour", "A", "B", "C", "D", "E"
), class = "data.frame")
B <- structure(list(name1 = c("trt", "0", "1", "1", "1", "1", "9.4"), 
    name2 = c("ctrl", "3", "1", "10", "1", "1", "9.4")), .Names = c("name1", 
"name2"), row.names = c("cond", "hour", "A", "B", "C", "D", "E"
), class = "data.frame")
4

1 に答える 1

1

データに重大なフォーマットの問題があります。

まず、列は同じデータ型である必要があり、行は観測値である必要があります。(常に正しいとは限りませんが、開始するには非常に良い方法です) ここでは、 と呼ばれるcond行、次に と呼ばれる行hour、そして一連の分類があると思います。そもそもデータの提示方法はあまり意味がなく、データを簡単に操作するのに適していません。しかし、すべてが失われるわけではありません。これは私がすることです:

データを再編成する:

C <- data.frame(matrix(as.numeric(unlist(A)), ncol=2)[-(1:2), ])

colnames(C) <- c('A.trt', 'A.cntr')
rownames(C) <- LETTERS[1:nrow(C)]

D <- data.frame(matrix(as.numeric(unlist(B)), ncol=2)[-(1:2), ])

colnames(D) <- c('B.trt', 'B.cntr')

(df <- cbind(C, D))

これにより、次のことが得られます。

#   A.trt A.cntr B.trt B.cntr
# A     1      1   1.0    1.0
# B    10      1   1.0   10.0
# C     1      1   1.0    1.0
# D     1      1   1.0    1.0
# E    10     10   9.4    9.4

次に、問題は次の方法で簡単に解決できます。

df[which(df[, 1] > 0.95*df[, 3] & df[, 2] > 0.95*df[, 4]), ]

#   A.trt A.cntr B.trt B.cntr
# A     1      1   1.0    1.0
# C     1      1   1.0    1.0
# D     1      1   1.0    1.0
# E    10     10   9.4    9.4
于 2013-03-01T00:10:57.253 に答える