使用 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
我想将 v1
和 v2
放入一个名为 variable 的列中。每个变量的两个值应放在两个单独的列中:activation 和 fixation.
目标数据框应如下所示:
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()
函数,但我不知道如何创建 activation 和 fixation 列同时进行(而且我连续这样做都失败了)。
如有任何想法,我们将不胜感激!我是 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 的一种衬垫更有效,但我将把它留在这里。
我试图在同时创建两列的同时将数据框从宽改造成长。
我的原始数据框如下所示:
# 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
放入一个名为 variable 的列中。每个变量的两个值应放在两个单独的列中:activation 和 fixation.
目标数据框应如下所示:
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()
函数,但我不知道如何创建 activation 和 fixation 列同时进行(而且我连续这样做都失败了)。
如有任何想法,我们将不胜感激!我是 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 的一种衬垫更有效,但我将把它留在这里。