使用R中的PIVOT_Long()同时将数据透视到两个不同的列中? [英] Pivot data into two different columns simultaneously using pivot_longer() in R?
本文介绍了使用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
我想将v1
和v2
放入名为变量的单个列中。每个变量的两个值应放在两个单独的列中:激活和固定。
目标数据帧应如下所示:
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屋!
查看全文