r - R中的复杂(ish)pivot_longer
问题描述
我有一个大致如下所示的数据集:
person_id mem_was_there_1 mem_was_there_2 mem_was_there_3 new_number_yn_1 new_number_yn_2 new_number_yn_3
<dbl> <dbl> <dbl> <dbl> <lgl> <lgl> <lgl>
1 100 1 2 3 FALSE TRUE FALSE
2 101 4 5 6 TRUE FALSE FALSE
我需要将这些数据转换为如下内容:
# A tibble: 6 x 4
person_id nr mem_was_there new_number_yn
<dbl> <dbl> <dbl> <lgl>
1 100 1 1 FALSE
2 100 2 2 TRUE
3 100 3 3 FALSE
4 101 1 4 TRUE
5 101 2 5 FALSE
6 101 3 6 FALSE
我想使用pivot_longer()
fromdplyr
选项。我尝试使用此代码,但我没有使用在 ??? 处填写什么 正则表达式到第三个_
。理想情况下,我希望names_sep
'mem_was_there_xx' 和 'new_number_yn_xx' 分开
df1 %>%
pivot_longer(cols = c(matches("^mem_was_there"), matches("^new_number_yn")),
names_to = c('.value', 'nr'),
names_sep = ??? )
df1 <-
tribble(~person_id, ~mem_was_there_1, ~mem_was_there_2, ~mem_was_there_3, ~new_number_yn_1, ~new_number_yn_2, ~new_number_yn_3,
100, 1, 2, 3, F, T, F,
101, 4, 5, 6, T, F, F)
解决方案
这应该可以解决问题:
spec <- data.frame(.name = names(df1)[-1],
nr = rep(1:3, 2),
.value = c(rep("mem_was_there", 3), rep("new_number_yn", 3)),
stringsAsFactors = FALSE)
library(tidyverse)
df1 %>%
pivot_longer_spec(., spec)
给出:
# # A tibble: 6 x 4
# person_id nr mem_was_there new_number_yn
# <dbl> <int> <dbl> <lgl>
# 1 100 1 1 FALSE
# 2 100 2 2 TRUE
# 3 100 3 3 FALSE
# 4 101 1 4 TRUE
# 5 101 2 5 FALSE
# 6 101 3 6 FALSE
推荐阅读
- android - 如何在后台在 google map v2 for android 上加载折线和点?
- wpf - 在 WinForm 中获取 textBlock 的正确宽度
- android-recyclerview - RecyclerView.Adapter - getItemId() - 适配器中的稳定 ID 必须是唯一的并且不应更改
- javascript - symfony webpack encore 带有数据表的巨大 js 文件
- javascript - Kendo Editor 自定义编辑器工具从 DOM 中消失
- php - 无法实现此日期格式
- python - Movielens 数据集上的 KMeans 聚类
- c++ - 将迭代器设置为具有最高键的值
- c# - 将多个测试用例链接到一个测试用例
- android - 有什么方法可以获取所有打开的活动的实例?实例,不是活动的名称?