在 r 中的行和列之间执行查找函数

doing a lookup function between rows and columns in r

我有一个数据框,其中有一列在下面的虚拟数据中称为 ID,其值与几个后续列名称中的 1 个匹配。我想做一些查找函数,它可以看到 ID 的值,找到匹配的列,然后给出该行的值。

ID = c("A", "A", "B", "B", "B", "C", "C")
A = c(1, 2, 3, 4, 5, 6, 7)
B = c(8, 9, 10, 11, 12, 13, 14)
C = c("set1", "set2", "set1", "set2", "set3", "set1", "set2")

df = data.frame(ID, A, B, C)

#pseudo code:
#df$newrow <- for df, if ID == Column Name, then Column Name & Row Value

我想要的输出:

  ID A  B    C newrow
1  A 1  8 set1      1
2  A 2  9 set2      2
3  B 3 10 set1     10
4  B 4 11 set2     11
5  B 5 12 set3     12
6  C 6 13 set1   set1
7  C 7 14 set2   set2

我可以用一堆 if/then 语句来概念化它,但实际数据有更多的列,我想知道是否有更好的方法/或特定的命令来做。

您可以使用以下解决方案:

library(dplyr)

df %>%
  rowwise() %>%
  mutate(new_col = as.character(get(ID)))

# A tibble: 7 x 5
# Rowwise: 
  ID        A     B C     new_col
  <chr> <dbl> <dbl> <chr> <chr>  
1 A         1     8 set1  1      
2 A         2     9 set2  2      
3 B         3    10 set1  10     
4 B         4    11 set2  11     
5 B         5    12 set3  12     
6 C         6    13 set1  set1   
7 C         7    14 set2  set2  

实现您想要的结果的基础 R 选项:

df$newrow <- diag(as.matrix(df[seq(nrow(df)), df$ID]))
df
#>   ID A  B    C newrow
#> 1  A 1  8 set1      1
#> 2  A 2  9 set2      2
#> 3  B 3 10 set1     10
#> 4  B 4 11 set2     11
#> 5  B 5 12 set3     12
#> 6  C 6 13 set1   set1
#> 7  C 7 14 set2   set2