使用Purrr将循环转换为函数式编程 - 但仅适用于变量向量

问题描述 投票:0回答:1

我想迭代一个数据帧 - 用中位数替换NA - 但只迭代一个变量向量

这段代码有效,但我想让它更具功能性(同时也将它整合到其他'Tidy'代码中)。如何将第2部分转换为功能样式并将其与第1部分中的表达式链接起来?

ColsMed <- c("V7", "V9", "V10")

for(i in ColsMed){
wvsFSU[is.na(wvsFSU[,i]), i] <- median(wvsFSU[,i], na.rm = TRUE)
}

我正在尝试以下和许多变种。

library(Purrr)
wvsFSU <- map(is.na(wvsFSU), ColsMed, median) 

它是循环通过一部分变量而不是整个数据帧,这让我很沮丧

r functional-programming dplyr purrr
1个回答
1
投票

您的数据很广泛。使用聚集的长格式使代码更具动态性。这是一个解决方案:

wvsFSU %>% 
  rownames_to_column() %>% 
  gather(k, v, V7, V9, V10) %>% # Enter columns here
  group_by(k) %>% 
  mutate(v = if_else(is.na(v), median(v, na.rm = T), v)) %>% 
  ungroup() %>% 
  spread(k,v) %>% 
  select(-rowname)
© www.soinside.com 2019 - 2024. All rights reserved.