使用 pivot_longer() 在 R 中同时将数据透视到两个不同的列中?

Pivot data into two different columns simultaneously using pivot_longer() in R?

我试图在同时创建两列的同时将数据框从宽改造成长。

我的原始数据框如下所示:

# Sample data frame.
id     <- c(1,2)
v1.act <- c(.4, .8)
v2.act <- c(.5, .7)
v1.fix <- c(1, 0)
v2.fix <- c(0, 1)
df     <- data.frame(id, v1.act, v2.act, v1.fix, v2.fix)

  id v1.act v2.act v1.fix v2.fix
1  1    0.4    0.5      1      0
2  2    0.8    0.7      0      1

我想将 v1v2 放入一个名为 variable 的列中。每个变量的两个值应放在两个单独的列中:activationfixation.

目标数据框应如下所示:

  id variable activation fixation
1  1       v1        0.4        1
2  1       v2        0.5        0
3  2       v1        0.8        0
4  2       v2        0.7        1

关于如何获得此输出的任何想法?

我试过 pivot_longer() 函数,但我不知道如何创建 activationfixation 列同时进行(而且我连续这样做都失败了)。

如有任何想法,我们将不胜感激!我是 tidyr.

的新手

编辑

事实证明,你可以一次完成 pivot_longer:

df %>% 
  pivot_longer(-id,
               names_to = c("variable", ".value"),
               names_pattern = "(.*)\.(.*)")%>% 
  rename(activation = act, fixation = fix)

同样的结果。


不知道如何一次性完成,但你可以使用

library(tidyr)
library(dplyr)

df %>% 
  pivot_longer(-id,
               names_to = c("variable", "class"),
               names_pattern = "(.*)\.(.*)") %>% 
  pivot_wider(names_from = "class") %>% 
  rename(activation = act, fixation = fix)

这个returns

# A tibble: 4 x 4
     id variable activation fixation
  <dbl> <chr>         <dbl>    <dbl>
1     1 v1              0.4        1
2     1 v2              0.5        0
3     2 v1              0.8        0
4     2 v2              0.7        1
df %>% 
        pivot_longer(-id) %>% 
        separate(name, into = c("variable", "b")) %>% 
        pivot_wider(names_from="b", values_from="value")
# A tibble: 4 × 4
     id variable   act   fix
  <dbl> <chr>    <dbl> <dbl>
1     1 v1         0.4     1
2     1 v2         0.5     0
3     2 v1         0.8     0
4     2 v2         0.7     1

编辑:显然 Martin Gal 的一种衬垫更有效,但我将把它留在这里。