我很确定在这个论坛中进行一些导航会非常容易解决这个问题。
我的问题是我以前的数据集的结构如下所示:
它表示不同样本(1,2,3,4)中的XY坐标。
我想堆叠数据但保持坐标之间的关系,以便必须堆叠两个变量(x和y)。我想得到一个结果,如下所示:
我知道我可以手动完成,但我相信R会让我的工作更实用,优化我的时间。显然,这个例子的目的是展示问题。我的原始数据(此处未显示)由数百列和行组成......
答案 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上没有有效条目的所有行。希望它有用。