【发布时间】:2020-10-07 17:42:17
【问题描述】:
是否可以在一次pivot_longer() 调用中旋转更长的两组匹配的名称-值列?
这是一个玩具示例。我有两种值类型(a、b)和两种类型的值(一个数值和一个表示负数的二进制指示符)。是否可以在一个函数调用中将它们都重塑更长的时间?
此示例使用两个 pivot_longer() 调用并将它们连接在一起。
set.seed(1)
a_val = rnorm(10)
b_val = rnorm(10)
a_neg = factor(as.numeric(a_val < 0), levels = 0:1, labels = c("No", "Yes"))
b_neg = factor(as.numeric(b_val < 0), levels = 0:1, labels = c("No", "Yes"))
# random data
df <- data.frame(
id = seq(1:10),
a = a_val,
b = b_val,
a_low = a_neg,
b_low = b_neg
)
full_join(
df %>%
select(id, a, b) %>%
pivot_longer(cols = a:b, names_to = "value_type", values_to = "value"),
df %>%
select(id, a_low, b_low) %>%
pivot_longer(cols = a_low:b_low, names_to = "value_type", names_pattern = "([ab])_low", values_to = "low"),
by = c("id", "value_type")
)
#> # A tibble: 20 x 4
#> id value_type value low
#> <int> <chr> <dbl> <fct>
#> 1 1 a -0.626 Yes
#> 2 1 b 1.51 No
#> 3 2 a 0.184 No
#> 4 2 b 0.390 No
#> 5 3 a -0.836 Yes
#> 6 3 b -0.621 Yes
#> 7 4 a 1.60 No
#> 8 4 b -2.21 Yes
#> 9 5 a 0.330 No
#> 10 5 b 1.12 No
#> 11 6 a -0.820 Yes
#> 12 6 b -0.0449 Yes
#> 13 7 a 0.487 No
#> 14 7 b -0.0162 Yes
#> 15 8 a 0.738 No
#> 16 8 b 0.944 No
#> 17 9 a 0.576 No
#> 18 9 b 0.821 No
#> 19 10 a -0.305 Yes
#> 20 10 b 0.594 No
由reprex package (v0.3.0) 于 2020 年 6 月 17 日创建
【问题讨论】: