使用Purrr将循环转换为函数式编程,但仅应用于变量向量
我想迭代一个数据帧——用中位数替换NA——但只迭代变量向量 这段代码是有效的,但我想让它更具功能性(同时也将其合并到其他“整洁”的代码中)。如何将第2节转换为函数样式,并将其与第1节中的表达式链接使用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您的数据非常广泛。使用“聚集”的长格
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)