当所有行数据可用时返回行号

时间:2016-12-25 09:48:22

标签: r indexing dataframe

给出像

这样的data.frame
x y label
1 2 a
2 3 b
3 4 c

和值" 2"," 3"," b"从data.frame确定行索引/数字的最快方法是什么?

在这种情况下,答案应为2。

2 个答案:

答案 0 :(得分:1)

您可以按照以下方式使用do.callpaste

which(do.call(paste, df) == '2 3 b')
#[1] 2

但是,您需要注意如何定义字符串(在本例中为2 3 b)。以下将澄清,

which(do.call(paste, c(df, sep = ',')) =='2,3,b')
#[1] 2
which(do.call(paste, c(df, sep = '_')) =='2_3_b')
#[1] 2

或者,如果您要检查多个字符串,那么match会派上用场,

ind <- c('2,3,b', '3,4,c')
match(ind, do.call(paste, c(df, sep = ',')))
#[1] 2 3

答案 1 :(得分:0)

我们可以使用

which(!rowSums(df1!= list(2, 3, "b")))
#[1] 2

或另一个选项是Map

which(Reduce(`&`, Map(`==`, df1, list(2, 3, 'b'))))
#[1] 2