gpt4 book ai didi

r - 使用查找表更改数据框多列中的值

转载 作者:行者123 更新时间:2023-12-04 09:12:06 25 4
gpt4 key购买 nike

我正在尝试使用查找表一次更改多个列的值。它们都使用相同的查找表。我只知道如何为一列执行此操作——我只使用 merge ,但在处理多列时遇到问题。

下面是一个示例数据框和一个示例查找表。我的实际数据要大得多(约 10K 列,8 行)。
example <- data.frame(a = seq(1,5), b = seq(5,1), c=c(1,4,3,2,5))lookup <- data.frame(number = seq(1,5), letter = LETTERS[seq(1,5)])
理想情况下,我最终会得到一个如下所示的数据框:
example_of_ideal_output <- data.frame(a = LETTERS[seq(1,5)], b = LETTERS[seq(5,1)], c=LETTERS[c(1,4,3,2,5)])
当然,在我的实际数据中,数据框是数字,但是查找表要复杂得多,所以我不能只使用像 LETTERS 这样的函数解决事情。

先感谢您!

最佳答案

这是一个使用 lapply() 依次作用于每一列的解决方案:

as.data.frame(lapply(example,function(col) lookup$letter[match(col,lookup$number)]));
## a b c
## 1 A E A
## 2 B D D
## 3 C C C
## 4 D B B
## 5 E A E

或者,如果您不介意切换到矩阵,您可以实现“更矢量化”的解决方案,因为矩阵将允许您调用 match()和索引 lookup$letter整个输入只需一次:
matrix(lookup$letter[match(as.matrix(example),lookup$number)],nrow(example));
## [,1] [,2] [,3]
## [1,] "A" "E" "A"
## [2,] "B" "D" "D"
## [3,] "C" "C" "C"
## [4,] "D" "B" "B"
## [5,] "E" "A" "E"

(当然,之后您可以通过 as.data.frame() 强制返回 data.frame,尽管如果需要,您还必须恢复列名,这可以通过 setNames(...,names(example)) 来完成。但如果您真的想要坚持使用 data.frame,我的第一个解决方案可能更可取。)

关于r - 使用查找表更改数据框多列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31633302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com