使用组和删除列名前缀的PIVOT_LONG [英] pivot_longer with groups and remove column name prefixes

查看:13
本文介绍了使用组和删除列名前缀的PIVOT_LONG的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Pivot_Long将数据帧从宽格式转换为长格式。

原始数据帧为:

df.start <- structure(list(amprise = 0.015, ampfull = 0.005, ampfall = 0.03, freq1 = 250L, freq2 = 500L, freq3 = 750L, relamp1 = 0.01, relamp2 = 0.3, relamp3 = 0.02), class = "data.frame", row.names = c(NA, -1L))

如下所示:

> df.start
  amprise ampfull ampfall freq1 freq2 freq3 relamp1 relamp2 relamp3
1   0.015   0.005    0.03   250   500   750    0.01     0.3    0.02

我想将其浓缩为六列:

> df.end
  harmonic amprise ampfull ampfall freq relamp
1        1   0.015   0.005    0.03  250   0.01
2        2   0.015   0.005    0.03  500   0.30
3        3   0.015   0.005    0.03  750   0.02

我从this post了解到,我可以使用cols = -c("amprise", "ampfull", "ampfall")将列组保留为宽格式。

我还可以看到,我应该能够在names_pattern中使用regex来删除其余列名中的前缀,以填充Harmonic列。但是,我正在努力将它们正确地结合在一起。

如有任何帮助,不胜感激!

推荐答案

您可以使用names_pattern

tidyr::pivot_longer(df.start, 
                    cols = -c("amprise", "ampfull", "ampfall"), 
                    names_to = c('.value', 'harmonic'), 
                    names_pattern = '(.*?)(\d+)')

#  amprise ampfull ampfall harmonic  freq relamp
#    <dbl>   <dbl>   <dbl> <chr>    <int>  <dbl>
#1   0.015   0.005    0.03 1          250   0.01
#2   0.015   0.005    0.03 2          500   0.3 
#3   0.015   0.005    0.03 3          750   0.02

当我们在names_to中使用.value时,我们希望将原始列名的一部分保留为重塑后的数据帧中的列。使用names_pattern,我们可以定义要从中提取列名的组。

(.*?)(\d+)这里我们定义了两组列名。第一组(.*?)提取所有内容,直到遇到的第二组数字(\d+)为止。由于我们在第一部分中使用了.value,所以regex(.*?)中的该部分作为单独的列名。

这篇关于使用组和删除列名前缀的PIVOT_LONG的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆