Return 当这些行值出现在 R 中的 df2 中时 df1 的行索引

Return the row indices of df1 when those row values occur in df2 in R

我正在用 R 编写代码。我有一个大数据框 (df1) 和一个小数据框 (df2)。 df2 是 df1 的子集,但顺序是随机的。我需要知道 df2 中出现的 df1 的行索引。所有特定的单元格值都有很多重复项。 Tapirus terrestris 出现不止一次,每个 ModType 值也是如此。我尝试使用 which() 和 grpl() 进行试验,但无法让我的代码正常工作。

df1 <- data.frame(
  SpeciesName = c('Tapirus terrestris', 'Panthera onca', 'Leopardus tigrinus' , 'Leopardus tigrinus'),
  ModType   = c('ANN', 'GAM', 'GAM','RF'),
  Variable_scale = c('aspect_s2_sd', 'CHELSAbio1019_s3_sd','CHELSAbio1015_s4_sd','CHELSAbio1015_s4_sd')) 


df2 <- data.frame(
  SpeciesName = c('Tapirus terrestris', 'Leopardus tigrinus'),
  ModType   = c('ANN', 'RF'),
  Variable_scale = c('aspect_s2_sd', 'CHELSAbio1015_s4_sd')) 

应该输出一个数组:1,4 因为 df1 第 1 行和第 4 行出现在 df2 中。

您可以在 df1merge 数据集中创建索引列。

df1$index <- 1:nrow(df1)
df3 <- merge(df1, df2)
df3$index
#[1] 4 1

您可以使用 match.

df1[match(df2$SpeciesName, df1$SpeciesName), ]

另一种选择是tidyverse

library(dplyr)
df1 %>%
    mutate(index = row_number()) %>%
    inner_join(df2)