该值匹配函数中R是非常有用的.但根据我的理解,它不足以支持两个或高维输入.
例如,假设x和y是相同数量的列的矩阵,我想匹配行的x行y.'R'函数调用match(x,y)不会这样做.列表的输入也出现相同的不足.
我已经实现了我自己的版本调用matchMat(xMat, yMat)(附在下面),但我想知道你是什么解决了这个任务.
matchMat = function(xMat, uMat, dimn=1) {
ind = rep(-1, dim(xMat)[dimn])
id = 1 : dim(uMat)[dimn]
for (i in id) {
e = utilSubMat(i, uMat, dimn)
isMatch = matchVect(e, xMat, dimn)
ind[isMatch] = i
}
return(ind)
}
matchVect = function(v, xMat, dimn) {
apply(xMat, dimn, function(e) {
tf = e == v
all(tf)
})
}
unittest_matchMat = function() {
dimn = …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的数据框:
data.frame(matrix(c(11:13, 21:23, 11:13, 11:13, 31:33, 41:43, 31:33), byrow = TRUE, ncol = 3))
Run Code Online (Sandbox Code Playgroud)
现在我想知道哪一行是哪一行的重复项,返回具有重复行号最低的索引向量。如果一行不是前一行的重复项,则它应该获取下一个可用索引。在此示例中,输出应为:
c(1, 2, 1, 1, 3, 4, 3)
Run Code Online (Sandbox Code Playgroud)
我可以通过循环所有行对来实现这一点,但必须有一种有效的方法来做到这一点。
不幸的是,duplicated只显示哪些行是重复的,但不显示它们到底重复的是哪一行。有什么功能可以帮助这里吗?