如何在另一个(p)映射函数中映射列名

时间:2019-09-09 18:58:27

标签: r purrr

我想将mydf2中的每个值更改为attitude对应列中的最接近值。例如,我们将mydf2的{​​{1}}列中的第一个值64.37888替换为64,因为64是complaints的{​​{1}}列中最接近的数字。这应该很容易,除了我希望代码能概括为许多列名。尽管在下面的示例中仅关注三列,但我希望只要在向量attitude的末尾添加“ raises”或“ critical”,代码也可以工作。

complaints

我尝试了上面的代码,但是pmap匿名函数无法像手动输入函数一样识别cols_to_iterate为输入(c(“投诉,”学习“,”进阶“))

谢谢!

1 个答案:

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