如何重新映射数据框中的多列?

时间:2021-06-04 09:36:11

标签: r mapping apply

我有一个数据框:

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

...但是当数据帧很大时,它是地球上最慢的方法。 有没有更好的方法来做到这一点? 谢谢!

1 个答案:

答案 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