我有两个数据框如下;
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
我想根据数据帧“data1”的值重新编码“data2”数据帧中的所有值。预期结果如下;
> 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”中,数据框将具有100,000个具有唯一值的行范围。
我在“plyr”包中找到了几个带有“mapvalue()”,“revalue()”函数的例子,我认为这些函数可用于在单个数据帧中重新编码值。但无法找到一种有效的方法来做我想做的事。
答案 0 :(得分:1)
我们可以使用base R
通过从'data1'创建键/值向量来填充'data2'中的值
data2[] <- setNames(data1$V2, data1$V1)[as.matrix(data2)]
data2
# 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
或者我们可以将dplyr
与match
library(dplyr)
data2 %>%
mutate_each(funs(data1$V2[match(., data1$V1)]))
# 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