У меня есть два кадра данных:Перекодировать данные в двух данных с помощью R
data1 <- as.data.frame(matrix(0, ncol = 2, nrow = 5))
data1$V1 <- c("AA", "BB", "CC", "DD", "EE")
data1$V2 <- c(1, 2, 3, 4, 5)
> data1
V1 V2
1 AA 1
2 BB 2
3 CC 3
4 DD 4
5 EE 5
data2 <- as.data.frame(matrix(0, ncol = 2, nrow = 9))
data2$V1 <- c("AA", "AA", "AA", "BB", "BB","BB","CC","CC","DD")
data2$V2 <- c("BB", "CC", "EE", "CC", "DD","EE","DD","EE","EE")
> data2
V1 V2
1 AA BB
2 AA CC
3 AA EE
4 BB CC
5 BB DD
6 BB EE
7 CC DD
8 CC EE
9 DD EE
Я хочу, чтобы перекодировать все значения в «data2» dataframe на основе значений dataframe «. Data1' Ожидаемый результат заключается в следующем;
> data3
V1 V2
1 1 2
2 1 3
3 1 5
4 2 3
5 2 4
6 2 5
7 3 4
8 3 5
9 4 5
В моем реальном наборе данных„data1“dataframe бы имеют 100 000 рядов строк с уникальными значениями.
Я нашел несколько примеров с пакетом «plyr» с функциями «mapvalue()», «revalue()», которые, как я думаю, могут использоваться для пересчета значений в единых кадрах данных. Но не смог найти эффективный метод, чтобы делать то, что я хочу.
'data2 [] <- lapply (data2, function (x) {setNames (data1 $ V2, data1 $ V1) [x]})' или с dplyr, 'data2%>% mutate_all (funs (setNames (data1 $ V2, data1 $ V1) [.])) ' – alistaire
[Чтение при поиске таблицы] (http://adv-r.had.co.nz/Subsetting.html#applications) – alistaire
Спасибо за ваше решение, это сработало для меня. – Anna