我正在尝试收集两组列。每个集合都需要以一个新列结束,但行数据是链接的,因此顺序使用tidyr::gather()
不能保证保留跨列组织。看起来tidyr::pivot_longer()
可以做到这一点,但我很难过。类似的帖子在这里,但答案涉及使用 grep 重命名列,我无法解释这一点,而且这里也没有必要。
library(tidyverse)
df <- data.frame(
Position=1:5,
A_Width=3:7,
B_Width=4:8,
A_Error=seq(0, 2.0, 0.5),
B_Error=seq(0.3, 1.5, 0.3)
)
df <- df %>%
tidyr::pivot_longer(
cols=c(A_Width, B_Width, A_Error, B_Error),
names_to= ? ,
names_pattern= ? ,
)
##Desired Data Frame
df_long <- data.frame(
Position=rep(1:5,2),
Group=c(rep("A",5), rep("B",5)),
Width=c(3:7,4:8),
Error=c(seq(0, 2.0, 0.5), seq(0.3, 1.5, 0.3))
)
我们可以使用
.value
withnames_to
来使用列名称的第二部分来指定这些值应该转到的新列。结果(按照遇到的顺序,可以排序)
pivot_longer
您可以使用和的组合pivot_wider