R中的'which'函数返回row = 1而匹配值是否在第2行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R中的'which'函数返回row = 1而匹配值是否在第2行?相关的知识,希望对你有一定的参考价值。

我有一个翻译表,我正在使用do.call(paste, input) %in% do.call(paste, big_translation_table)

它返回TRUEFALSE

然后我使用which函数来查找索引,但它总是返回1

请指教。

这是一个小例子:

test1 <- data.frame(a = 1, b=2, c = "r", stringsAsFactors = FALSE)
test2 <- data.frame(a = c(1,2), b=c(2,10), c = c("r","p"), stringsAsFactors = FALSE)

which(do.call(paste, test1) %in% do.call(paste, test2))

返回1,没关系,现在让我们测试一下:

test1 <- data.frame(a = 2, b=10, c = "p", stringsAsFactors = FALSE)
which(do.call(paste, test1) %in% do.call(paste, test2))

也返回1。我认为它应该返回2。

请指教。

答案

%in%只是(在这种情况下)test1是否出现在test2的逻辑测试,而不是根据具体情况。我想你只想要==

test1 <- data.frame(a = 1, b=2, c = "r", stringsAsFactors = FALSE)
> which(do.call(paste, test1) == do.call(paste, test2))
[1] 1

然后:

test1 <- data.frame(a = 2, b=10, c = "p", stringsAsFactors = FALSE)
> which(do.call(paste, test1) == do.call(paste, test2))
[1] 2
另一答案

OP要求在翻译表test2中找到所有列中匹配的行号。他将所有专栏粘贴在一起,为查找test1中的test2创造了一个自然的关键。

不是将列重复粘贴在一起,而是进行连接更有效。 data.table包有which参数,它返回行号:

library(data.table)
setDT(test2)[setDT(test1), on = names(test1), which = TRUE]
[1] 2

对于第二个测试用例。

如果有必要明确要在连接中使用的列,我们可以写

setDT(test2)[setDT(test1), on = .(a, b, c), which = TRUE]

以上是关于R中的'which'函数返回row = 1而匹配值是否在第2行?的主要内容,如果未能解决你的问题,请参考以下文章

求一java字符串替换方法类似$***这样

PHP查询语句,如何返回总记录数??

excel函数index的用法

计算均值时何时使用 which vs subset 函数

R语言str_subset函数和str_which函数:str_subset函数提取字符串向量中所有包含匹配字符的字符串str_which函数返回字符串向量中所有包含匹配字符的位置(索引)

easyui datagrid('getRowIndex',rows[0].id)) 取值问题