有一个表有两列,每列都有类型字符。它是:
"FTGS" "JKLP"
"CVVA" "CVVA"
"HGFF" "CVVD"
"CVVD" "HGFF"
"OPSF" "WQSR"
...
有人可以告诉我如何编写一个函数来吐出第1列和第2列中特定字符组合的索引(行号)吗?如果我输入函数(HGFF,CVVD),它将返回3和4(HGFF或CVVD是否在第1列或第2列无关紧要)。如果我输入(CVVA,CVVA)它将是2.问题是它应该检查两列。 R中有解决方案吗?否则bash也没关系。
答案 0 :(得分:0)
以下功能应该适合您:
myFun <- function(v1, v2, indf) {
x <- sort(c(v1, v2))
which(apply(indf, 1, function(z) all(sort(z) == x)))
}
用法就是这样(假设你的数据在data.frame
中被称为&#34; mydf&#34;):
myFun("CVVA", "CVVD", indf = mydf)
myFun("HGFF", "CVVD", indf = mydf)
在R中,您正在寻找的功能是which
,但它不会直接执行您正在寻找的内容。
答案 1 :(得分:0)
这似乎也有效
fun1 <- function(v1, v2, mat) {
ind <- c(0, -nrow(mat))
indx1 <- which(mat == v1) + ind
indx2 <- which(mat == v2) + ind
if (all(sort(indx1) == sort(indx2))) {
indx1
} else NULL
}
fun1("HGFF","CVVD", mat) #mat is the matrix
#[1] 3 4
fun1("CVVA","CVVD", mat)
#NULL