gpt4 book ai didi

r - R 中没有分隔符的 Pivot_longer()?

转载 作者:行者123 更新时间:2023-12-04 02:27:46 27 4
gpt4 key购买 nike

我正在尝试使用 R 中的 pivot_longer() 转换表格。但分隔不是通过任何常见符号(例如“_”或“.”)进行的。而是列名称的结尾方式(“B”或“T”)。我尝试使用正则表达式,但不太成功。

下面是示例原始表以及我希望最终转换后的表如何。非常感谢您的帮助。

原始表格:

tibble(Datetime = seq(as.Date("2000/1/1"), by = "month", length.out = 10), 
`ABC1-P1B` = seq(1,10),
`ABC1-P1T` = seq(101,110),
`ABC1-P2B` = seq(11,20),
`ABC1-P2T` = seq(201,210))
# A tibble: 10 x 5
Datetime `ABC1-P1B` `ABC1-P1T` `ABC1-P2B` `ABC1-P2T`
<date> <int> <int> <int> <int>
1 2000-01-01 1 101 11 201
2 2000-02-01 2 102 12 202
3 2000-03-01 3 103 13 203
4 2000-04-01 4 104 14 204
5 2000-05-01 5 105 15 205
6 2000-06-01 6 106 16 206
7 2000-07-01 7 107 17 207
8 2000-08-01 8 108 18 208
9 2000-09-01 9 109 19 209
10 2000-10-01 10 110 20 210

希望输出表为:

tibble(Datetime = c(seq(as.Date("2000/1/1"), by = "month", length.out = 10),
seq(as.Date("2000/1/1"), by = "month", length.out = 10)),
`ID` = rep(c("ABC1-P1", "ABC1-P2"),10),
`B` = c(seq(1,10), seq(11,20)),
`T` = c(seq(101,110), seq(201,210))
)

# A tibble: 20 x 4
Datetime ID B T
<date> <chr> <int> <int>
1 2000-01-01 ABC1-P1 1 101
2 2000-02-01 ABC1-P2 2 102
3 2000-03-01 ABC1-P1 3 103
4 2000-04-01 ABC1-P2 4 104
5 2000-05-01 ABC1-P1 5 105
6 2000-06-01 ABC1-P2 6 106
7 2000-07-01 ABC1-P1 7 107
8 2000-08-01 ABC1-P2 8 108
9 2000-09-01 ABC1-P1 9 109
10 2000-10-01 ABC1-P2 10 110
11 2000-01-01 ABC1-P1 11 201
12 2000-02-01 ABC1-P2 12 202
13 2000-03-01 ABC1-P1 13 203
14 2000-04-01 ABC1-P2 14 204
15 2000-05-01 ABC1-P1 15 205
16 2000-06-01 ABC1-P2 16 206
17 2000-07-01 ABC1-P1 17 207
18 2000-08-01 ABC1-P2 18 208
19 2000-09-01 ABC1-P1 19 209
20 2000-10-01 ABC1-P2 20 210

最佳答案

我们可以在 names_sep 中指定一个正则表达式环视

library(dplyr)
library(tidyr)
df1 %>%
pivot_longer(cols = -Datetime, names_to = c("ID", '.value'),
names_sep = "(?<=\\d)(?=[A-Z]$)")

-输出

# A tibble: 10 x 4
# Datetime ID B T
# <date> <chr> <int> <int>
# 1 2000-01-01 ABC1-P1 1 101
# 2 2000-02-01 ABC1-P1 2 102
# 3 2000-03-01 ABC1-P1 3 103
# 4 2000-04-01 ABC1-P1 4 104
# 5 2000-05-01 ABC1-P1 5 105
# 6 2000-06-01 ABC1-P1 6 106
# 7 2000-07-01 ABC1-P1 7 107
# 8 2000-08-01 ABC1-P1 8 108
# 9 2000-09-01 ABC1-P1 9 109
#10 2000-10-01 ABC1-P1 10 110

数据

df1 <- tibble(Datetime = seq(as.Date("2000/1/1"), by = "month", length.out = 10), 
`ABC1-P1B` = seq(1,10),
`ABC1-P1T` = seq(101,110))

关于r - R 中没有分隔符的 Pivot_longer()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66213981/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com