【发布时间】:2021-03-04 15:40:55
【问题描述】:
我下载了格式复杂的数据,我正在努力让它变得整洁。数据框包含来自多个采样的数据,并且对于每个采样,它提供两列,一列是携带它的年份,另一列是获得的数量。 这是一个具有相同结构的虚拟数据集:
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”和“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(),但我无法获得所需的输出。
【问题讨论】:
-
列名的命名结构和你提供的dummydata一样吗?
-
非常相似但不完全相同,它们看起来像 E05MTS 和 E05YOE,其中 E05 表示它是采样 05,而 MTS/YOE 区分结果/年。我知道这个更改对 pivot_longer 中 names_pattern 的使用有影响,但为了简单起见,我将其缩短了。