使用组和删除列名前缀的PIVOT_LONG [英] pivot_longer with groups and remove column name prefixes
本文介绍了使用组和删除列名前缀的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屋!
查看全文