如何将两种列分组为两列
How to group two kinds of columns into two columns
我下载了一种格式不正确的数据,我正在努力使它整洁。数据框包含来自多个样本的数据,对于每个样本,它提供两列,一列表示携带它的年份,另一列表示获得的数量。
这是一个具有相同结构的虚拟数据集:
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()
,但我无法获得所需的输出。
这个怎么样?如果您的数据是一致的(只有 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"
)
我下载了一种格式不正确的数据,我正在努力使它整洁。数据框包含来自多个样本的数据,对于每个样本,它提供两列,一列表示携带它的年份,另一列表示获得的数量。 这是一个具有相同结构的虚拟数据集:
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()
,但我无法获得所需的输出。
这个怎么样?如果您的数据是一致的(只有 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"
)