对于B列中的每个元素,如何获取A列中匹配元素的索引

时间:2019-04-22 02:47:34

标签: r

必须对此有一个优雅的解决方案:说我有由“字符”类的2列A和B组成的数据帧“ df”。 A是字母[A-Z],B是相同长度的字母(带替换)的随机采样。如何添加第三列“ C”,其中包含与列B中的每个元素匹配的列A中的元素的索引。因为我将在很长的数据帧上重复调用此函数,寻找一种不使用for循环的有效解决方案。我唯一能找到的相关帖子是this one,但它没有提供所有匹配项的索引。

我想到了一个繁琐的解决方案,其中A列的元素用作其自身索引的名称。然后,我可以使用B列使用方括号在A列中选择元素。这不太理想,因为它需要对数据结构进行重大更改。

### here is a reproducible example
### using tibble for cleaner output

df <- tibble(A = LETTERS, B = sample(LETTERS, replace = T, size = 26), C = NA)
df
# A tibble: 26 x 3
   A     B     C    
   <chr> <chr> <lgl>
 1 A     L     NA   
 2 B     N     NA   
 3 C     I     NA   
 4 D     C     NA   
 5 E     Y     NA   
 6 F     W     NA   
 7 G     V     NA   
 8 H     J     NA   
 9 I     A     NA   
10 J     L     NA   
# … with 16 more rows

所需的输出(通过for循环实现):

for(i in 1:nrow(df)){
  df$C[i] <- which(df$A == df$B[i])
}
df
# A tibble: 26 x 3
   A     B         C
   <chr> <chr> <int>
 1 A     L        12
 2 B     N        14
 3 C     I         9
 4 D     C         3
 5 E     Y        25
 6 F     W        23
 7 G     V        22
 8 H     J        10
 9 I     A         1
10 J     L        12
# … with 16 more rows

0 个答案:

没有答案