【发布时间】:2017-01-20 03:33:36
【问题描述】:
我有两个数据框如下;
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 行具有唯一值的范围。
我发现了几个带有“mapvalue()”、“revalue()”函数的“plyr”包示例,我认为它们可用于对单个数据帧中的值进行重新编码。但无法找到一种有效的方法来做我想做的事。
【问题讨论】:
-
data2[] <- lapply(data2, function(x){setNames(data1$V2, data1$V1)[x]})或使用 dplyr,data2 %>% mutate_all(funs(setNames(data1$V2, data1$V1)[.])) -
感谢您的解决方案,它对我有用。