[英]Which rows contain the specified element, using R
這是一個列表,每一行代表一個隨機事件
[,1] [,2] [,3]
[1,] "Zebra" "bat" "lion"
[2,] "crocodile" "lion" "bat"
[3,] "dog" "fish" "snake"
[4,] "bat" "zebra" "snake"
[5,] "dog" "Bear" "bat"
[6,] "dog" "Zebra" "lion"
[7,] "Bear" "dog" "Zebra"
[8,] "pig" "dog" "snake"
[9,] "zebra" "lion" "fish"
[10,] "Bear" "dog" "Zebra"
我正在嘗試使用 %in% 命令來檢查哪些事件中有狗。
對於基本相等,使用which(., arr.ind=TRUE)
:
m <- matrix(1:25, nr=5)
m
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 6 11 16 21
# [2,] 2 7 12 17 22
# [3,] 3 8 13 18 23
# [4,] 4 9 14 19 24
# [5,] 5 10 15 20 25
which(m == 5L, arr.ind = TRUE)
# row col
# [1,] 5 1
如果您需要使用%in%
設置成員資格,那么僅將==
替換為%in%
是行不通的,不幸的是,
which(m %in% c(5L, 9L, 12L), arr.ind=TRUE)
# [1] 5 9 12
這是因為m ==.
返回一個matrix
,但m %in%.
返回一個向量(我不記得為什么 atm):
m == 5L
# [,1] [,2] [,3] [,4] [,5]
# [1,] FALSE FALSE FALSE FALSE FALSE
# [2,] FALSE FALSE FALSE FALSE FALSE
# [3,] FALSE FALSE FALSE FALSE FALSE
# [4,] FALSE FALSE FALSE FALSE FALSE
# [5,] TRUE FALSE FALSE FALSE FALSE
m %in% c(5L,9L,12L)
# [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [20] FALSE FALSE FALSE FALSE FALSE FALSE
我們可以通過強制返回是一個矩陣來解決這個問題:
which(matrix(m %in% c(5L,9L,12L), nrow=nrow(m)), arr.ind = TRUE)
# row col
# [1,] 5 1
# [2,] 4 2
# [3,] 2 3
要獲取其中包含單詞'dog'
的行索引,您可以使用rowSums
作為 -
which(rowSums(mat == 'dog') > 0)
#[1] 3 5 6 7 8 10
數據
mat <- structure(c("Zebra", "crocodile", "dog", "bat", "dog", "dog",
"Bear", "pig", "zebra", "Bear", "bat", "lion", "fish", "zebra",
"Bear", "Zebra", "dog", "dog", "lion", "dog", "lion", "bat",
"snake", "snake", "bat", "lion", "Zebra", "snake", "fish", "Zebra"
), .Dim = c(10L, 3L), .Dimnames = list(NULL, NULL))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.