【发布时间】:2020-09-22 14:57:58
【问题描述】:
我有一个df 的形式:
df <- tibble(
id = c(1,2,3),
x02val_a = c(0,1,0),
x03val_a = c(1,0,0),
x04val_a = c(0,1,1),
x02val_b = c(0,2,0),
x03val_b = c(1,3,0),
x04val_b = c(0,1,2),
age02 = c(1,2,3),
age03 = c(2,3,4),
age04 = c(3,4,5)
)
我想把它变成整洁的格式,比如:
# A tibble: 9 x 5
id year val_a val_b age
<dbl> <chr> <dbl> <dbl> <dbl>
1 1 02 0 0 1
2 1 03 1 2 2
...
here 的答案适用于更简单的命名方案。然而,由于我的真实数据集中存在命名方案,我很难定义一个匹配所有模式的正则表达式。
到目前为止,我的尝试都错过了一个或其他方案。我可以获取变量名在前,年份在后的那个 (age02),或者类型和年份在前,名称在后的那个 (x02var),但不能同时获取。
有没有办法用 a) 正则表达式来做到这一点?或 b) pivot_longer 调用的一些组合或参数化?
我知道总是有可能在最后使用左连接来做到这一点,正如我所描述的here
我试图用两个组来定义正则表达式(因为这些组不是严格连续的[意思是:左,右],这导致我):
df %>%
pivot_longer(-id,names_to = c('.value', 'year'),names_pattern = '([a-z]+(\\d+)[a-z]+_[a-z])')
【问题讨论】: