如何在 data.table“melt”函数 - R 中对开头相同但结尾不同的字符串进行模式匹配?

问题描述 投票:0回答:1

我正在使用

melt
R 包中的
data.table
函数来重新排列数据框。在函数内使用
measure=patterns()
时,我遇到了模式匹配问题。我无法正确匹配的列具有以下命名结构:

1) '10_1', '10_2', ... 

2) '10_1_95_TEXT', '10_2_95_TEXT', ...

这些命名结构需要单独捕获,作为新数据帧的

melt
操作的一部分。我尝试过以下正则表达式:

  1.  ^10.*[:digit:]

  2.  ^10.*TEXT$

这些给出了以下错误:

'Error in do_patterns(measure.sub, names(data)) : 
  Patterns not found: [^10.*[:digit:]$, ^10.*TEXT$]'

数据肯定具有使用上述每个命名结构命名的列。有什么想法吗?

r regex melt
1个回答
0
投票

你的意思是这样的吗?

library(data.table)
DT <- data.table(id=1:2, `10_1`=3:4, `10_2`=5:6, `10_1_95_TEXT`=7:8, `10_2_95_TEXT`=9:10)
DT
#       id  10_1  10_2 10_1_95_TEXT 10_2_95_TEXT
#    <int> <int> <int>        <int>        <int>
# 1:     1     3     5            7            9
# 2:     2     4     6            8           10
melt(DT, id.vars="id", measure.vars=patterns(first="^10_\\d+$", second="^10_.*T$"))
#       id variable first second
#    <int>   <fctr> <int>  <int>
# 1:     1        1     3      7
# 2:     2        1     4      8
# 3:     1        2     5      9
# 4:     2        2     6     10
© www.soinside.com 2019 - 2024. All rights reserved.