将数据帧的行值与其对应的值进行匹配

时间:2019-04-13 12:58:19

标签: r

下面的图片是我在R中设置的数据:

enter image description here

可复制的示例:

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)
)

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

enter image description here

预先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

删除第一列,转置剩余的内容,将其转换回数据框,将列名称设置为原始行号,堆栈并省略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

答案 1 :(得分:0)

尝试一下:

library(tidyverse)

data %>% 
  rownames_to_column("row_id") %>% 
  gather(key, value, -time, -row_id) %>% 
  select(1, 4) %>% 
  na.omit() %>% 
  spread(value, row_id)

输出为:

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
1 2 3 3 4 3 3 3 4 1  1  1  4  3  1  2  1  4  5