r - 当使用带有多个变量的pivot_longer时,我丢失了常量变量(包括id)

标签 r tidyverse tidyr

我尝试 reshape 以下内容

<表类=“s-表”> <标题> 国家 地区 abc2001 abc2002 xyz2001 xyz2002 <正文> 日本 东亚 1 2 4.5 5.5

至以下内容

<表类=“s-表”> <标题> 国家 地区 年 abc xyz <正文> 日本 东亚 2001 1 4.5 日本 东亚 2002 2 5.5

其实还有五个变量也是同样的方式。

我使用以下代码:

long <- data %>% pivot_longer(cols = c(-country, -region), names_to = c(".value", "year"), names_pattern = "([^\\.]*)\\.*(\\d{4})")

结果是数据的长版本,只是我丢失了国家和地区变量。我做错了什么?或者我还能怎样做得更好?

提前谢谢您。

最佳答案

我们可以更改正则表达式模式以匹配一个或多个非数字 (\\D+) 作为第一个捕获组和一个或多个数字 (\\d+) )作为第二个

librarytidyr)
pivot_longer(data, cols = c(-country, -region),
    names_to = c(".value", "year"), names_pattern = "(\\D+)(\\d+)")

-输出

# A tibble: 2 × 5
  country region    year    abc   xyz
  <chr>   <chr>     <chr> <int> <dbl>
1 Japan   East Asia 2001      1   4.5
2 Japan   East Asia 2002      2   5.5

数据

data <- structure(list(country = "Japan", region = "East Asia", abc2001 = 1L, 
    abc2002 = 2L, xyz2001 = 4.5, xyz2002 = 5.5), 
class = "data.frame", row.names = c(NA, 
-1L))

关于r - 当使用带有多个变量的pivot_longer时,我丢失了常量变量(包括id),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71727005/

相关文章:

r - 如何在 lm 中指定参数估计之间的关系?

r - 如何在 R 中中断 RPostgresql 查询

r - 在没有矢量扫描的情况下查找给定间隔中的值

r - 分组数据增长率,3组

r - 如何按组(ID)复制最后一行?

r - 达到阈值时 dplyr 重置计数器

r - 如何使用 tidyverse 函数将一列的变量与其他列的数值相加

r - 如何在knitr中创建部分和新线

删除 data.frame 中包含其他列的行

r - 使用具有重复标识符的 data.frame/tibble 进行传播