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

使用Purrr将循环转换为函数式编程,但仅应用于变量向量,r,functional-programming,dplyr,purrr,R,Functional Programming,Dplyr,Purrr,我想迭代一个数据帧——用中位数替换NA——但只迭代变量向量 这段代码是有效的,但我想让它更具功能性(同时也将其合并到其他“整洁”的代码中)。如何将第2节转换为函数样式,并将其与第1节中的表达式链接 ColsMed <- c("V7", "V9", "V10") for(i in ColsMed){ wvsFSU[is.na(wvsFSU[,i]), i] <- median(wvsFSU[,i], na.rm = TRUE) } ColsMed您的数据非常广泛。使用“聚集”的长格

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

这段代码是有效的,但我想让它更具功能性(同时也将其合并到其他“整洁”的代码中)。如何将第2节转换为函数样式,并将其与第1节中的表达式链接

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

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

ColsMed您的数据非常广泛。使用“聚集”的长格式使代码更加动态。以下是一个解决方案:

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)
尝试
wvsFSU[,ColsMed]
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)