【发布时间】:2020-11-08 03:36:18
【问题描述】:
我有一个漂亮且相当长的不同 tidyverse 命令管道,但在中途我需要使用SetDT() %>% melt(...) %>% as_tibble()。我的代码运行良好,但我想知道使用 gather() 或 pivot_longer() 的纯 tidyverse 解决方案是否可以为我做同样的事情。试了很多,还是搞不定。
这是示例数据框
library(tidyverse)
library(data.table)
df <- tibble(ID1 = c("A", "B", "C", "E", "F"),
ID2 = 1:5,
PR_1 = c(100, 150, 200, 250, 300),
QL_1 = c(2.5, 4, 5, 2, 1),
PR_2 = c(105, 150, 210, 275, 301),
QL_2 = c(3, 4.5, 5.1, 2.5, 3))
df
# A tibble: 5 x 6
ID1 ID2 PR_1 QL_1 PR_2 QL_2
<chr> <int> <dbl> <dbl> <dbl> <dbl>
1 A 1 100 2.5 105 3
2 B 2 150 4 150 4.5
3 C 3 200 5 210 5.1
4 E 4 250 2 275 2.5
5 F 5 300 1 301 3
这是预期的结果
ID1 ID2 variable PR QL
<chr> <int> <chr> <dbl> <dbl>
1 A 1 1 100 2.5
2 B 2 1 150 4
3 C 3 1 200 5
4 E 4 1 250 2
5 F 5 1 300 1
6 A 1 2 105 3
7 B 2 2 150 4.5
8 C 3 2 210 5.1
9 E 4 2 275 2.5
10 F 5 2 301 3
我现在使用这段代码(它有效,但需要 data.table 包)
df %>%
setDT() %>%
melt(id = c("ID1",
"ID2"),
measure = patterns("^PR", "^QL"),
variable.factor = FALSE,
value.name = c("PR", "QL")) %>%
as_tibble()
我的问题是,tidyverse 等价物是什么? 我真的很喜欢 data.table 包,但对于这个项目,我只想坚持使用 tidyverse 代码
【问题讨论】:
标签: r dplyr data.table tidyverse data-wrangling