1

Rに次の構造のテーブルがあります。

ID var1 var2 var3 .... varN
AA  1    2    1          3
AB  0.2  1    4          1

..。

var1<2and var2<2and var3<2and ...の行のみを選択するにはどうすればよいですvarN<2か?

4

5 に答える 5

2

あなたの例は再現できないので、私は自分自身を作りました:

x <- data.frame(x1 = 1:4, x2 = 2:5, x3 = 3:6, x4 = c(1,6,3,12))
#-----
  x1 x2 x3 x4
1  1  2  3  1
2  2  3  4  6
3  3  4  5  3
4  4  5  6 12

あなたの基準に基づいて、行 2 と 4 を選択する必要があると思います。このコードはそれを取得します。

x[apply(x, 1, function(z) all(diff(z) > 0)),]
#-----
  x1 x2 x3 x4
2  2  3  4  6
4  4  5  6 12
于 2012-06-21T14:24:21.110 に答える
1

データフレームが行内datのすべての要素が 2 未満であり、それらの行のみを返すテストである場合、次のようになります。

dat[ apply( apply(dat[-1], 1, "<" ,2) , 2, all ), ]

ロジック: 内部適用は論理行列を返します。

apply(dat[-1], 1, "<" ,2)
     [,1]  [,2]  [,3]
var1 TRUE  TRUE  TRUE
var2 TRUE FALSE  TRUE
var3 TRUE  TRUE FALSE
varN TRUE FALSE  TRUE

R行列は列優先の順序で構築されるため、次元で転置されることに注意してください。そのため、外側の適用は列で機能する必要があるため、all関数を適用するためのINDEXとして2を使用します。テスト:

 dat <- read.table(text="ID var1 var2 var3  varN
 BA  1  1  1  1
 AA  1    2    1          3
 AB  0.2  1    4          1", header=TRUE)

 dat[ apply( apply(dat[-1], 1, "<" ,2) , 2, all ), ]
#  ID var1 var2 var3 varN
#1 BA    1    1    1    1
于 2012-06-21T14:30:57.027 に答える
1

データがdata.frameDF にある場合:

DF[rowSums(DF) == sum(2 * dim(DF)[2]), ]
于 2012-06-21T14:17:38.557 に答える
0

これはそれを行います:

dat[rowSums(dat[,-1] >= 2) == 0,]

テスト:

dat <- read.table(text=
"ID var1 var2 var3  varN
 BA  1     1   1    1
 AA  1     2   1    3
 AB  0.2   1   4    1", header=TRUE)
dat[rowSums(dat[,-1] >= 2) == 0,]
#  ID var1 var2 var3 varN
#1 BA    1    1    1    1
于 2016-05-04T06:41:42.543 に答える
0

私があなたの質問を理解していれば、あなたが望むことを行うには少なくとも2つの方法があります(すでに指定されているものに加えて.1つ目はwhich()コマンドです.クエリに基づいて:

datasetname[which((datasetname$var1<2) & (datasetname$var2<2) & ... ]

必要な行を返す必要があります。そうでしょう

newdatasetname <- subset(datasetname, datasetname$var1<2 & ...)

これらのコマンドの詳細については、R で ?subsetand と入力するだけです。?which

于 2012-06-21T16:50:06.187 に答える