我想将mydf2
中的每个值更改为attitude
对应列中的最接近值。例如,我们将mydf2
的{{1}}列中的第一个值64.37888替换为64,因为64是complaints
的{{1}}列中最接近的数字。这应该很容易,除了我希望代码能概括为许多列名。尽管在下面的示例中仅关注三列,但我希望只要在向量attitude
的末尾添加“ raises”或“ critical”,代码也可以工作。
complaints
我尝试了上面的代码,但是pmap匿名函数无法像手动输入函数一样识别cols_to_iterate
为输入(c(“投诉,”学习“,”进阶“))
谢谢!
答案 0 :(得分:0)
这里不应该使用pmap
,因为pmap
用于遍历行。您应该改用map
。
library(tidyverse)
library(DescTools)
set.seed(123)
cols_to_iterate <- c("complaints", "learning", "advance")
mydf2 <- as.data.frame(map(attitude[cols_to_iterate], ~runif(6, 50, 100)))
map2_df(mydf2,colnames(mydf2),function(column,colname){
map_dbl(column,function(cell){
Closest(attitude[[colname]],cell)[1] # use the first value in case there are two closest values
})
})
# A tibble: 6 x 3
complaints learning advance
<dbl> <dbl> <dbl>
1 64 75 72
2 90 75 72
3 70 75 55
4 90 72 72
5 90 75 63
6 53 72 52