【问题标题】:How to find indices of specific rows in dataframe r如何在数据帧 r 中查找特定行的索引
【发布时间】:2019-04-15 15:42:56
【问题描述】:

我有一个数据框 A,它看起来像这样:

col 1   col2   col3
 NL      6       9
 UK      5       5
 US      9       7

我有一个数据框 B,它由大型数据框的行的子集组成,如下所示:

 col 1   col2   col3
 NL      6       9
 UK      5       5

现在,我想从 A 中的 B 中找到行的索引,所以它应该返回 1 and 2。有人知道怎么做吗?

编辑 接下来,当我在 B 中只有前两列时,我还想找到 A 中行的索引。因此,在这种情况下,它也应该返回 1 and 2。有人知道如何做到这一点吗?

【问题讨论】:

  • match(do.call(paste, df2), do.call(paste, df1)) 或执行merge 并获取他的行名
  • 在我的情况下,这会产生一个只有 NA 值的向量
  • 那么,它的意思是'col 1',可能有一些前导/滞后spces
  • 复制/粘贴你的数据得到的结果是match(do.call(paste, df2), do.call(paste, df1))# [1] 1 2
  • 我的列名确实是错误的,谢谢!您是否也有关于如何解决我编辑的部分的想法?

标签: r


【解决方案1】:

一般情况下,match 获取索引。在我们的例子中,一种方法是将 paste 行放在一起并使用 match 获取索引

match(do.call(paste, df2), do.call(paste, df1)

如果只有列的子集具有相同的列名,则使用intersect 获取列名向量,对数据集进行子集化,执行paste 并使用match 获取索引

nm1 <- intersect(names(df1), names(df2))
match(do.call(paste, df2[nm1]), do.call(paste, df1[nm1]))

另一个选项是join,我们在两个数据集中创建一个行索引,进行连接并提取行索引

 library(dplyr)
 df2 %>%
    mutate(rn = row_number()) %>% 
   left_join(df2 %>% 
          mutate(rn = row_number()), by = c('col1', 'col2', 'col3')) %>% 
   pull(rn.y)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2019-08-12
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多