如何在R中堆叠具有两个相关变量的数据集

时间:2017-09-12 21:10:05

标签: r database stack dataset

我很确定在这个论坛中进行一些导航会非常容易解决这个问题。

我的问题是我以前的数据集的结构如下所示:

enter image description here

它表示不同样本(1,2,3,4)中的XY坐标。

我想堆叠数据但保持坐标之间的关系,以便必须堆叠两个变量(x和y)。我想得到一个结果,如下所示:

enter image description here

我知道我可以手动完成,但我相信R会让我的工作更实用,优化我的时间。显然,这个例子的目的是展示问题。我的原始数据(此处未显示)由数百列和行组成......

1 个答案:

答案 0 :(得分:1)

这是一个整合的解决方案。

library(tidyverse)
old <- data.frame(x1 = c(2.2, NA, NA, NA),
              y1 = c(2.1, NA, NA, NA), 
              x2 = c(2.3, 2.2, NA, NA), 
              y2 = c(2.5, 2.3, NA, NA),
              x3 = c(1.9, 2.1, 2.3, NA),
              y3 = c(2.6, 2.6, 2.3, NA),
              x4 = c(2.5, 2.6, 2.5, 2.1),
              y4 = c(2.1, 2.3, 2.6, 2.2))

new <- gather(old, xy, val) %>% 
    mutate(coord = substr(xy, 1, 1),
           pair = parse_number(xy)) %>% 
    group_by(xy) %>% 
    mutate(sample = 1:n()) %>% 
    ungroup() %>% 
    select(-xy) %>% 
    spread(coord, val) %>% 
    filter(!is.na(x) & !is.na(y))

new
# A tibble: 10 x 4
    pair sample     x     y
   <dbl>  <int> <dbl> <dbl>
 1     1      1   2.2   2.1
 2     2      1   2.3   2.5
 3     2      2   2.2   2.3
 4     3      1   1.9   2.6
 5     3      2   2.1   2.6
 6     3      3   2.3   2.3
 7     4      1   2.5   2.1
 8     4      2   2.6   2.3
 9     4      3   2.5   2.6
10     4      4   2.1   2.2

请注意,最后一行仅用于删除丢失的数据,并删除x和y上没有有效条目的所有行。希望它有用。