如何在R语言中按列的NA数量调整列的顺序?
按列缺失值数量排序数据框列的正确方法
你的代码问题在于:is.na(df)会生成一个和原数据框同维度的逻辑矩阵,order(is.na(df))会把这个矩阵里的所有逻辑值扁平化后排序,得到的是元素位置索引,根本不是按每列的NA总数来排序的,所以结果不符合预期。
下面是两种正确的实现方式:
方法一:分步计算(更直观)
# 先计算每列的NA数量,按降序排序得到列名顺序 na_sorted_cols <- names(df)[order(colSums(is.na(df)), decreasing = TRUE)] # 按排序后的列名重新排列数据框 df_ordered <- df %>% select(all_of(na_sorted_cols))
方法二:管道链式写法(更简洁)
df_ordered <- df %>% select(order(colSums(is.na(.)), decreasing = TRUE))
关键说明:
colSums(is.na(.)):用.指代管道中的当前数据框,计算每列的NA总数order(..., decreasing = TRUE):指定按NA数量降序排列,让NA最多的列排在最前面- 如果需要NA最少的列在前,去掉
decreasing = TRUE即可
内容的提问来源于stack exchange,提问作者si_schmi
相关产品推荐
相关产品推荐

