Мы можем использовать lapply
и match
в R
df[-1] <- lapply(df[-1], function(x) x[match(df$MASTER, x)])
#If need to change to 0 or by default it is NA
df[is.na(df)] <- 0
# MASTER CENTRAL_NERVOUS NERVOUS_SYSTEM NEUROGENESIS
#1 12AEX 0 12AEX 0
#2 2610042L04RIK 0 2610042L04RIK 0
#3 2610301B20RIK 0 2610301B20RIK 2610301B20RIK
#4 2700046G09RIK 0 2700046G09RIK 0
#5 31BEX 0 31BEX 0
#6 38DLP 0 0 0
#7 7A6EX 0 7A6EX 0
#8 9630013A20RIK 9630013A20RIK 9630013A20RIK 9630013A20RIK
#9 97C2 0 97C2 0
и аналогично, используя dplyr
library(dplyr)
df %>% mutate_at(-1, ~.[match(MASTER, .)])
data
Если вы хотите преобразовать значения в 0, убедитесь, что столбцы являются символами, а не факторами.
df <- structure(list(MASTER = c("12AEX", "2610042L04RIK", "2610301B20RIK",
"2700046G09RIK", "31BEX", "38DLP", "7A6EX", "9630013A20RIK",
"97C2"), CENTRAL_NERVOUS = c("9630013A20RIK", "AARS", "AATK",
"ABCA2", "ABCB1B", "ABCB6", "ABL1", "ABL2", "ABR"), NERVOUS_SYSTEM = c("12AEX",
"2610042L04RIK", "2610301B20RIK", "2700046G09RIK", "31BEX", "7A6EX",
"9630013A20RIK", "97C2", "A830010M20RIK"), NEUROGENESIS = c("2610301B20RIK",
"9630013A20RIK", "A830010M20RIK", "AU040320", "AATK", "ABCA2",
"ABCC8", "ABI1", "ABI2")), class = "data.frame", row.names = c(NA, -9L))