[英]selecting all rows which has value > 1 in r
數據集我有一個數據,想要選擇所有在 r 中值 > 1 的行。 我試過 sel <- apply(data[,collist],1,function(row) "1" %in% row) 但它不起作用,給我一個完整的數據框,
[data set][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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.