簡體   English   中英

如何在另一個(p)映射函數中映射列名

[英]How to map column names inside another (p)map function

我想在每個值更改mydf2在其最接近的價值attitude的相應列。 例如,我們將mydf2complaints列中的第一個值mydf2替換為64,因為64是attitudecomplaints列中最接近的數字。 這應該很容易,除了我希望代碼能概括為許多列名。 盡管在下面的示例中只有三列需要關注,但是我希望代碼也可以在矢量cols_to_iterate的末尾添加“ raises”或“ critical”來使用。

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)))

map(cols_to_iterate, function(col_of_interest){
  pmap(mydf2, function(cols_to_iterate, ...){
    new_mydf2_col_val <- Closest(pull(attitude, col_of_interest), col_of_interest)
    return(new_mydf2_col_val)
  })
}
)

# Error in x - a : non-numeric argument to binary operator

我嘗試了上面的代碼,但pmap匿名函數無法像手動輸入函數一樣識別cols_to_iterate作為輸入(c(“投訴,”學習“,”高級“))。

謝謝!

您不應在此處使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM