r - 将非 NA 值堆叠到每列的顶部

标签 r sorting rows na

我有一个数据框,其中包含列中的值和 NA。数据框如下所示:

A     B     C     D
1     NA    NA    NA
NA    2     3     NA
NA    4     NA    NA
5     NA    NA    6

我正在尝试将其转换为如下形式:

A     B     C     D
1     2     3     6
5     4     NA    NA
NA    NA    NA    NA
NA    NA    NA    NA

将非 NA 值堆叠到每列的顶部。有没有简单的方法可以做到这一点?

最佳答案

您可以使用 lapplyNA 值对每列进行排序。请记住,这会保留非 NA 列顺序,而 x[order(x)] 只会对列重新排序:

df1[] <- lapply(df1, function(x) x[order(is.na(x))])

df1
   A  B  C  D
1  1  2  3  6
2  5  4 NA NA
3 NA NA NA NA
4 NA NA NA NA

数据:

df1 <- read.table(header = T, text = "A     B     C     D
1     NA    NA    NA
NA    2     3     NA
NA    4     NA    NA
5     NA    NA    6")

关于r - 将非 NA 值堆叠到每列的顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57609242/

相关文章:

r - Julia 的 R 相当于什么?

r - 为什么 approx 返回一个列表而不是一个数据框或数组?

按顺序对文件进行 Bash 和排序

r - 如何从 R Studio 中的 read.table 打印一定数量的行

mysql - 从子查询返回多行

r - 第 1 组的唯一值,然后是第 1 组和第 2 组,依此类推

r - 提取R中字符串中的最后一个单词

java - 如何对字符串列表进行排序并在 Java 中找到 1000 个最常见的值

java - 从排序数组中交换了哪些数字

java - 如何保留选定的行并从 jtable 中删除其他行?