С R
мы можем сделать это без каких-либо пакетов (в base R
), используя именованный вектор
df1[-1] <- Map(function(x, y) y[x], df1[-1],
with(df2, split(setNames(Int, String), Column_name)))
df1
# C1 C2 C3
#1 A 5 1
#2 B 10 2
#3 C 0 7
Кроме того, если столбцы упорядочены, то это гораздо более компактно
df1[-1] <- with(df2, setNames(Int, String))[as.matrix(df1[-1])]
и без пробелов (#save_space)
df1[-1]<-with(df2,setNames(Int,String))[as.matrix(df1[-1])]
ПРИМЕЧАНИЕ. Это можно масштабировать до любого числа столбцов
data
df1 <- structure(list(C1 = c("A", "B", "C"), C2 = c("D", "E", "F"),
C3 = c("X", "Y", "Z")), class = "data.frame", row.names = c(NA,
-3L))
df2 <- structure(list(Column_name = c("C2", "C2", "C2", "C3", "C3",
"C3"), String = c("D", "E", "F", "X", "Y", "Z"), Int = c(5L,
10L, 0L, 1L, 2L, 7L)), class = "data.frame", row.names = c(NA,
-6L))