必须对此有一个优雅的解决方案:说我有由“字符”类的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