代码之家  ›  专栏  ›  技术社区  ›  Fabiano Battaglin

使用r对用sapply创建的数据帧进行排序

r
  •  0
  • Fabiano Battaglin  · 技术社区  · 7 年前

    我创建了一个数组,用SAPPLY计算每列的NAS

    na_count <-sapply(df, function(y) sum(length(which(is.na(y)))))
    

    然后我把它转换成一个数据帧

    na_count <-data.frame(na_count)
    

    我正在尝试使用以下代码按降序排序:

    na_count[order(na_count$na_count),]
    

    它确实有效,但是我会丢失具有每个功能名称的列。我如何在不丢失这些名称的情况下对其进行排序?

    1 回复  |  直到 7 年前
        1
  •  3
  •   r2evans    7 年前

    它们被存储为 row.names ,存储为 属性 在对象中,因此很容易被函数丢弃。(我要注意的是 用代码丢失行名,但这并不能改变它们是脆弱的事实,而且许多程序员认为,如果需要保留行名,就显式地将其设为行名。)大多数函数 dplyr 和相关的包装,例如,广告故意丢弃它们。

    通常最好将它们显式地设为列。加上@Mauritzevers和@Jasonaizkalns的建议,可能是:

    na_count <- sort(colSums(is.na(df)))
    na_count <- data.frame(names=names(na_count), count=na_count)
    

    (它当前从最小到最大排序 NA 计数)