如何在R中堆叠具有两个相关变量的数据集
我很确定这个问题对于一些在这个论坛上浏览的人来说是非常容易解决的 我的问题是,我以前的数据集的结构如下所示: 它表示不同样本(1、2、3、4)中的XY坐标 我希望堆叠数据,但保留坐标之间的关系,因此必须堆叠两个变量(x和y)。我想得到如下结果:如何在R中堆叠具有两个相关变量的数据集,r,database,stack,dataset,R,Database,Stack,Dataset,我很确定这个问题对于一些在这个论坛上浏览的人来说是非常容易解决的 我的问题是,我以前的数据集的结构如下所示: 它表示不同样本(1、2、3、4)中的XY坐标 我希望堆叠数据,但保留坐标之间的关系,因此必须堆叠两个变量(x和y)。我想得到如下结果: 我知道我可以手动完成,但我相信R将使我的工作更加实用,优化我的时间。显然,这是一个旨在说明问题的例子。我的原始数据(此处未显示)由数百列和数百行组成…这是一个tidyverse解决方案 library(tidyverse) old <- dat
我知道我可以手动完成,但我相信R将使我的工作更加实用,优化我的时间。显然,这是一个旨在说明问题的例子。我的原始数据(此处未显示)由数百列和数百行组成…这是一个tidyverse解决方案
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
库(tidyverse)
旧%
分组依据(xy)%>%
变异(样本=1:n())%>%
解组()%>%
选择(-xy)%>%
价差(坐标,val)%>%
过滤器(!is.na(x)和!is.na(y))
新的
#一个tibble:10x4
配对样本xy
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上没有有效项的所有行。希望对您有所帮助。如果您能提供一个可复制的数据集示例,那就太好了。这正是我想要的!非常感谢丹尼尔!很高兴这有帮助!