首页 > 解决方案 > 将数据框的行值与其对应的值匹配

问题描述

下图是我在 R 中的数据集:

在此处输入图像描述

可重现的例子:

data <- data.frame(
  time = rep(0.2, 5),
  m1 = c(9,15,2,8,18),
  m2 = c(11,1,13,12,NA),
  m3 = c(16,NA,7,17,NA),
  m4 = c(10,NA,3,4,NA),
  m5 = c(14,NA,6,NA,NA),
  m6 = c(NA,NA,5,NA,NA)
)

我想要以下输出,它是一个表格,显示数据集中的每个值,并且低于该值所属的行号:

在此处输入图像描述

预先感谢您的帮助 !

标签: r

解决方案


删除第一列,转置剩下的内容,将其转换回数据框,将列名设置为原始行号,堆叠并省略 NA 行。然后按值重新排序。

d <- na.omit(stack(setNames(as.data.frame(t(data[-1])), 1:nrow(data))))
d[order(d$values), ]

给予:

   values ind
8       1   2
13      2   3
16      3   3
22      4   4
18      5   3
17      6   3
15      7   3
19      8   4
1       9   1
4      10   1
2      11   1
20     12   4
14     13   3
5      14   1
7      15   2
3      16   1
21     17   4
25     18   5

推荐阅读