r语言 - 如何将两种列分组为两列



我下载了一个困难的格式的数据,我正试图使它整洁。该数据框包含来自几个采样的数据,对于每个采样,它提供两列,一列表示进行采样的年份,另一列表示获得的数据。这是一个具有相同结构的虚拟数据集:

df<-data.frame(s1y=c(2000,2001,2002),
s1r=c(5,23,5),
s2y=c(2004,2004,2003),
s2r=c(6,2,3),
s3y=c(2009,2008,2006),
s3r=c(4,2,12))
s1y s1r  s2y s2r  s3y s3r
1 2000   5 2004   6 2009   4
2 2001  23 2004   2 2008   2
3 2002   5 2003   3 2006  12

在列名中,数字表示采样的个数,"y"one_answers";r"代表年份和结果。我并不关心抽样;我想要两列,一列用于年份,另一列用于结果,所以它看起来像这样:

y  r
1 2000  5
2 2001 23
3 2002  5
4 2004  6
5 2004  2
6 2003  3
7 2009  4
8 2008  2
9 2006 12

我一直在尝试用pivot_longer()做这件事,但我不知道如何同时枢轴到两个长列,我也试图将它折叠成一个列,像这样

df%>%pivot_longer(cols=everything(),
names_pattern="(..)(.)",
names_to=c("sampling","type"),
values_to="result")

,然后使用pivot_wider(),但我还没有能够实现所需的输出。

这个怎么样?如果您的数据是一致的(只有yr),那么您需要每两行更改一个id_col

df %>%
pivot_longer(cols = everything(),
names_pattern="(..)(.)",
names_to=c("sampling","type"),
values_to = "result"
) %>%
mutate(id_col = row_number() + row_number() %% 2) %>%
pivot_wider(id_cols = "id_col",
names_from = "type",
values_from = "result"
) 

最新更新