选择具有值> gt的所有行1中的r

时间:2018-02-10 23:06:29

标签: r

dataset我有一个数据,想要选择所有值为>的行1中的r。 我试过了 sel< - apply(data [,collist],1,function(row)" 1"%in%row)  但它不起作用,给我整个数据框,

[data set][1]

我如何对这些数据进行子集化?

谢谢

1 个答案:

答案 0 :(得分:0)

最后的注释显示了以下示例中使用的数据。我已经改变了标题,因为问题中提供的标题是笨拙的并删除了减号标记列。

1)使用该数据,选择任何列中1为1的所有行的问题的正确答案是只选择前两个数据行,实际上是发生的情况:

subset(data, A == 1 | B == 1 | C == 1)
##       Sym A B C
## 1   ACAP3 0 0 1
## 2  ACTRT2 0 0 1

2)此版本未使用标题:

has1 <- rowSums(data == 1) > 0
data[has1, ]
##       Sym A B C
## 1   ACAP3 0 0 1
## 2  ACTRT2 0 0 1

3)虽然上面的内容应该有效,但只需检查数据列就可以这样做更安全了:

has1 <- rowSums(data[-1] == 1) > 0
data[has1, ]
##       Sym A B C
## 1   ACAP3 0 0 1
## 2  ACTRT2 0 0 1

4)或者如果我们不知道哪些列是数字的:

is.num <- sapply(data, is.numeric)
has1 <- rowSums(data[is.num] == 1) > 0
data[has1, ]
##       Sym A B C
## 1   ACAP3 0 0 1
## 2  ACTRT2 0 0 1

注意

由于问题没有以可复制的形式提供输入,因此以这种形式显示的输入被假定为:

Lines <- 'Hugo_Symbol "A - 3 A- A9J" "B - F2 - 7273 - 01" "C - FB - AAPP - 01"
ACAP3 0 0 - 1
ACTRT2 0 0 - 1
AGRN 0 0 - 0
ANKRD65 0 0 - 0
ATAD3A 0 0 - 0
'

data <- read.table(text = Lines, skip = 1, col.names = c("Sym", "A", "B", "X", "C"),
 colClasses = c(NA, NA, NA, "NULL", NA))

以上产生了这个:

data
##       Sym A B C
## 1   ACAP3 0 0 1
## 2  ACTRT2 0 0 1
## 3    AGRN 0 0 0
## 4 ANKRD65 0 0 0
## 5  ATAD3A 0 0 0