使用R中的PIVOT_Long()同时将数据透视到两个不同的列中? [英] Pivot data into two different columns simultaneously using pivot_longer() in R?

查看:9
本文介绍了使用R中的PIVOT_Long()同时将数据透视到两个不同的列中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在同时创建两列的同时从宽到长重塑数据帧。

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

# 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放入名为变量的单个列中。每个变量的两个值应放在两个单独的列中:激活固定

目标数据帧应如下所示:

  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()函数,但我想不出如何同时创建激活固定列(我已连续创建失败)。

任何想法都将不胜感激!我是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)

这将返回

# 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

这篇关于使用R中的PIVOT_Long()同时将数据透视到两个不同的列中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆