r - 使用 R 中的 pivot_longer() 将数据同时旋转到两个不同的列?
问题描述
我试图在同时创建两列的同时将数据框从宽改成长。
我的原始数据框如下所示:
# 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()
功能,但我无法弄清楚如何同时创建激活和固定列(并且我连续失败了)。
任何想法将不胜感激!我很陌生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
推荐阅读
- ios - Xcode 10.1:配置文件签名证书错误
- javascript - Laravel:急切加载belongsTo和HasMany关系?
- mysql - mysql DB中一个字段的动态值
- jsp - SpringSecurity 将我重定向回 login.jsp
- xmpp - 如何通知收件人有人在 ejabberd 上阻止了他们?
- ios - 如何解决应用商店中的“无效二进制”问题?
- matlab - 如何在 Matlab 中将数据值映射到颜色图/colobar
- python-3.x - 在 Python 中将 doc / docx 文件转换为 pdf
- database - 从 Azure 虚拟机上的 postgresql 断开连接
- python - 用于多种用户类型的 Django DRF OneToOneField