如何将dataframe转换为list并剔除NA值?
移除列表中的NA值解决方案
你已经将dataframe转换为列表,但列表内的每个向量都包含NA值,以下是两种直接的剔除方法:
方法一:利用tidyverse中的purrr包
因为你已经加载了tidyverse,可以直接用map()函数遍历列表并筛选非NA值:
library(tidyverse) ori_df <- data.frame(category=c('a','b',NA),subcategory=c('w',NA,'Z')) fin_list <- as.list(ori_df) # 清理NA值 fin_list_cleaned <- map(fin_list, ~ .x[!is.na(.x)])
map()会逐个处理列表里的每个向量,通过!is.na(.x)筛选出非NA的元素。
方法二:基础R实现
如果不想依赖tidyverse,用基础R的lapply()也能达到同样效果:
# 基础R方式清理NA值 fin_list_cleaned <- lapply(fin_list, function(x) x[!is.na(x)])
验证结果:执行identical(fin_list_cleaned, fin_list_wished)会返回TRUE,说明结果和期望一致。
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

