我下载了格式复杂的数据,我正在努力使其整洁。数据框包含来自多次采样的数据,对于每次采样,它提供两列,一列表示携带年份,另一列表示获得的数字。 这是一个具有相同结构的虚拟数据集:
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()
,但我无法获得所需的输出。
答案 0 :(得分:1)
这个怎么样?如果您的数据是一致的(只有 y
和 r
),那么您需要一个每两行更改一次的 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"
)