【问题标题】:return row number when all row data is available当所有行数据都可用时返回行号
【发布时间】:2016-12-25 09:48:22
【问题描述】:

给定一个类似的data.frame

x y label
1 2 a
2 3 b
3 4 c

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

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

【问题讨论】:

  • 类似which(do.call(paste, df) == '2 3 b')
  • @Sotos 谢谢!获取整数(0)作为输出。

标签: r indexing dataframe


【解决方案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

【讨论】:

    【解决方案2】:

    我们可以使用

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

    或者另一个选项是Map

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

    【讨论】:

      猜你喜欢
      • 2023-01-19
      • 2011-12-14
      • 2014-04-19
      • 2016-02-21
      • 2017-10-19
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多