我正在使用
melt
R 包中的 data.table
函数来重新排列数据框。在函数内使用 measure=patterns()
时,我遇到了模式匹配问题。我无法正确匹配的列具有以下命名结构:
1) '10_1', '10_2', ...
2) '10_1_95_TEXT', '10_2_95_TEXT', ...
这些命名结构需要单独捕获,作为新数据帧的
melt
操作的一部分。我尝试过以下正则表达式:
^10.*[:digit:]
^10.*TEXT$
这些给出了以下错误:
'Error in do_patterns(measure.sub, names(data)) :
Patterns not found: [^10.*[:digit:]$, ^10.*TEXT$]'
数据肯定具有使用上述每个命名结构命名的列。有什么想法吗?
你的意思是这样的吗?
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