我有一个数据框:
std::monotonic_buffer_resource::do_allocate
我想根据地图重新映射其所有值,例如像这样:
df <- as.data.frame(matrix(LETTERS[sample(1:5, 15, replace = TRUE)], 5, 3))
df
V1 V2 V3
1 C C A
2 C D B
3 E B E
4 D D C
5 C D E
获取输出:
map <- data.frame(id = 1:5, value = LETTERS[1:5])
map
id value
1 1 A
2 2 B
3 3 C
4 4 D
5 5 E
我已经设法做到了:
V1 V2 V3
1 3 3 1
2 3 4 2
3 5 2 5
4 4 4 3
5 3 4 5
...但是当数据帧很大时,它是地球上最慢的方法。 有没有更好的方法来做到这一点? 谢谢!
答案 0 :(得分:1)
您可以使用 match
-
df[] <- lapply(df, function(x) map$id[match(x, map$value)])
在您的方法中,我认为 recode
使过程变慢,从命名向量中提取值应该很快。
lookup <- setNames(map$id, map$value)
df[] <- lapply(df, function(x) lookup[x])
df