【问题标题】:Pivot data into two different columns simultaneously using pivot_longer() in R? [duplicate]使用 R 中的 pivot_longer() 将数据同时旋转到两个不同的列? [复制]
【发布时间】:2021-12-14 16:02:58
【问题描述】:

我正在尝试将数据框从宽变为长,同时创建两列。

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

# 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 很陌生。

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    编辑

    事实证明,你可以在一个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)
    

    返回

    # 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
    

    【讨论】:

    • 单行解决方案就像魔术一样!非常感谢!
    【解决方案2】:
    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 的一个班轮效率更高,但我将把这个留在这里。

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      相关资源
      最近更新 更多