我想在矩陣m中找到與向量v1和匹配的元素的索引v2。所以從類似的東西res我想得到元素2和
res1得到 8。謝謝!
flink = c("logit", "probit", "GEVmodNS", "GEVmod")
fcor = c("tanimoto", "exponential", "gaussian", "independent")
v1 = c('logit', 'exponential')
v2 = c('probit', 'independent')
m = expand.grid(fcor,flink)
res = m %in%v1
res1 = m %in%v2
uj5u.com熱心網友回復:
which(apply(m, 1, function(x) all(x %in% v1)))
[1] 2
which(apply(m, 1, function(x) all(x %in% v2)))
[1] 8
如果順序很重要以至于您希望一行與v1或的順序v2完全匹配,則使用==代替%in%。
uj5u.com熱心網友回復:
更新:感謝@Greg 指標!我們仍然可以使用whichwith==但必須宣告向量和矩陣元素的位置:
> which(m[,1] == v1[2] & m[,2] == v1[1])
[1] 2
> which(m[,1] == v2[2] & m[,2] == v2[1])
[1] 8
第一個答案(就 OP 的問題而言,這是不正確的)
which(v1 == m)
which(v2 == m)
> which(v1 == m)
[1] 2 6 10 14 17 19
> which(v2 == m)
[1] 4 8 12 16 21 23
uj5u.com熱心網友回復:
嘗試這個
> which(!lengths(Map(setdiff, list(v1), asplit(m, 1))))
[1] 2
> which(!lengths(Map(setdiff, list(v2), asplit(m, 1))))
[1] 8
uj5u.com熱心網友回復:
假設您希望在匹配時順序很重要
Var2 Var1
1 logit tanimoto
2 logit exponential
# ... ...
# Should match row 2.
v1 <- c('logit', 'exponential')
# Should NOT match row 2.
v3 <- c('exponential', 'logit')
這是一個|>適用于任意數量欄位的原生管道的優雅替代方案:
(v1 == t(m)) |> apply(2, all) |> which()
# [1] 2
(v2 == t(m)) |> apply(2, all) |> which()
# [1] 8
只要確保以正確的順序命名列
m <- expand.grid(flink, fcor)
以便它們對應于 等中的值v1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/340868.html
上一篇:如何使用特定列中的ID在R中系結data.frames
下一篇:如果串列中存在值,則更改列的值
