如何将gather()与多个x变量一起使用?

如何将gather()与多个x变量一起使用?,r,tidyr,R,Tidyr,我对R比较陌生,我正在努力解决以下问题: 我有一个数据框,它由两组x和y变量组成,即x1,y1和x2,y2。 我想使用gather或任何其他功能,可以帮助创建一个新的数据帧 将x1和x2变量合并为单个x变量。我曾尝试使用“聚集”,但只能看到应用于具有单个x变量的数据帧的示例。 Bellow是我的reprex,具有所需的输出 非常感谢你的帮助。谢谢大家! library(tidyr) (df x1 y1 x2 y2 #> 1 1 10 2 12 #> 2 2 14 3 13 #> 3 3

我对R比较陌生,我正在努力解决以下问题: 我有一个数据框,它由两组x和y变量组成,即x1,y1和x2,y2。 我想使用gather或任何其他功能,可以帮助创建一个新的数据帧 将x1和x2变量合并为单个x变量。我曾尝试使用“聚集”,但只能看到应用于具有单个x变量的数据帧的示例。 Bellow是我的reprex,具有所需的输出

非常感谢你的帮助。谢谢大家!

library(tidyr)
(df x1 y1 x2 y2
#> 1  1 10  2 12
#> 2  2 14  3 13
#> 3  3 12  4 11
(df_高x1 z y
#>1 y1 10
#>2 y1 14
#>3 y1 12
#>4 1 x2 2
#>5 2 x2 3
#>6 3 x2 4
#>7 1 y2 12
#>8 2 y2 13
#>9 3 y2 11
#期望输出
打印('所需输出')
#>[1]“期望输出”
(df_模块x y z
#>110Y1
#>2 14 y1
#>3 2 12 y2
#>4 3 12 y1
#>5313Y2
#>6 4 11 y2

由(v0.2.1)于2020年4月3日创建的

聚集
已在
tidyr
中替换为
pivot\u longer
,从而允许此操作

tidyr::pivot_longer(df, cols = everything(), 
                        names_to = c('.value', 'z'),
                        names_pattern = '(.)(.)')

#   z       x     y
#  <chr> <dbl> <dbl>
#1 1         1    10
#2 2         2    12
#3 1         2    14
#4 2         3    13
#5 1         3    12
#6 2         4    11
tidyr::pivot_longer(df,cols=everything(),
名称_to=c('.value','z'),
名称_模式='()(')
#zxy
#    
#1 1         1    10
#2 2         2    12
#3 1         2    14
#4 2         3    13
#5 1         3    12
#6 2         4    11

.value
在我们希望列名的一部分作为单独列中的数据时使用。在
名称\u pattern
中,我们使用正则表达式指定列被划分的组。在这种情况下,我们将每个字符作为单独的组使用,因此使用模式。(
()
)。

可以在此处使用
重塑

reshape(df, direction="long", varying=1:4, sep="", timevar="z")
    z x  y id
1.1 1 1 10  1
2.1 1 2 14  2
3.1 1 3 12  3
1.2 2 2 12  1
2.2 2 3 13  2
3.2 2 4 11  3

我们可以使用
data.table
方法

library(data.table)
melt(setDT(df), measure = patterns('^x', '^y'),
        variable.name = 'z', value.name = c('x', 'y'))
#   z x  y
#1: 1 1 10
#2: 1 2 14
#3: 1 3 12
#4: 2 2 12
#5: 2 3 13
#6: 2 4 11

谢谢!这非常有效,并给出了我想要的确切格式。请解释一下“.value”和regex是如何工作的好吗?@rado我在答案中添加了一些解释。不知道为什么,但当应用到我的实际数据集(包含4对x-y值)时,它不起作用。它没有打印大多数y值。@rado很可能名称不同在您的真实数据集中。在这里,我们的名称中只有2个字符。您可能还有其他字符。我们需要相应地调整
names\u模式
。您可以共享
names(df)吗
在您的真实数据集上?谢谢!您的方法也适用于我的真实数据集。谢谢!您的方法也适用于我的真实数据集。@rado
melt
from
data。table
非常有效