5

行のすべての値が別のデータフレームのそれぞれの行よりも大きい場合は、データをサブセット化したいです。また、いくつかの上の行をスキップする必要があります。これらの前の質問は私を助けませんでした、しかしそれは関連しています:

別のデータフレームの内容に基づいてデータフレームをサブセット化する

別のデータフレームからの情報を使用してデータをサブセット化する[r]

> A
     name1 name2
cond   trt  ctrl
hour     0     3
A        1     1
B       10     1
C        1     1
D        1     1
E       10    10
> B
     name1 name2
cond   trt  ctrl
hour     0     3
A        1     1
B        1    10
C        1     1
D        1     1
E        1     1

これ欲しい。AのALL値がBよりも大きい行のみ:

     name1 name2
cond   trt  ctrl
hour     0     3
E       10    10

私はこれらの3行を試しました:

subset(A, TRUE, select=(A[3:7,] > B[3:7,]))
subset(A, A > B)
A[A[3:7,] > B[3:7,]]

本当にありがとう。データを生成するコードは次のとおりです。

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", "1"), 
    name2 = c("ctrl", "3", "1", "10", "1", "1", "1")), .Names = c("name1", 
"name2"), row.names = c("cond", "hour", "A", "B", "C", "D", "E"
), class = "data.frame")
#############フォローアップの質問2013年2月28日

Rの異なるデータフレームの調整値に基づいてサブセット化するときのエラー

4

4 に答える 4

5
N <- nrow(A)
cond <- sapply(3:N, function(i) sum(A[i,] > B[i,])==2)
rbind(A[1:2,], subset(A[3:N,], cond))
于 2013-02-26T19:32:21.473 に答える
3

このようなテーブル間フィルタリングにはSQLを使用する方が良いと思います。クリーンで読みやすいです(ルールロジックを保持します)。

 library(sqldf)
sqldf('SELECT DISTINCT A.*
        FROM A,B
        WHERE A.name1   > B.name1
        AND    A.name2  > B.name2')
  name1 name2
1   trt  ctrl
2    10    10
于 2013-02-26T19:50:49.750 に答える
3

必要なdata.tableソリューション:

library(data.table)

# just to preserve the order, non-alphabetically
idsA <- factor(rownames(A), levels=rownames(A))
idsB <- factor(rownames(B), levels=rownames(B))

# convert to data.table with id
ADT <- data.table(id=idsA, A, key="id")
BDT <- data.table(id=idsB, B, key="id")

# filter as needed
ADT[BDT][name1 > name1.1 & name2 > name2.1, list(id, name1, name2)]
于 2013-02-26T19:56:23.257 に答える
2

行列の名前を変更するamatbmat

amat[which(sapply(1:nrows(amat),function(x) prod(amat[x,]>bmat[x,]))==1),]
[1] 10 10

また、必要に応じて「時間」の行を貼り付けることができます。

于 2013-02-26T19:41:33.670 に答える