私はいくつかの変数とシナリオの統計を含むデータフレームを持っています。データは次のようになります。tidyr正規表現を抽出
df <- data.frame(
Scenario = c('base','stress','extreme'),
x_min = c(-3,-2, -2.5),
x_mean = c(0,0.25, 1),
x_max = c(2, 1, 3),
y_min = c(-1.5, -2, -3),
y_mean = c(1, 2, 3),
y_max = c(5, 3, 3.5),
z_min = c(0, 1, 3),
z_mean = c(0.25, 2, 5),
z_max = c(2, 4, 7)
)
Scenario x_min x_mean x_max y_min y_mean y_max z_min z_mean z_max
1 base -3.0 0.00 2 -1.5 1 5.0 0 0.25 2
2 stress -2.0 0.25 1 -2.0 2 3.0 1 2.00 4
3 extreme -2.5 1.00 3 -3.0 3 3.5 3 5.00 7
私はtidyr年代を使いたい(this questionにハドレーの回答と同様に)集まって抽出機能のような形式のデータを取得する:
new_df
Scenario variable min mean max
1 base x -3.0 0.00 2.0
2 stress x -2.0 0.25 1.0
3 extreme x -2.5 1.00 3.0
4 base y -1.5 1.00 5.0
5 stress y -2.0 2.00 3.0
6 extreme y -3.0 3.00 3.5
7 base z 0.0 0.25 2.0
8 stress z 1.0 2.00 4.0
9 extreme z 3.0 5.00 7.0
コマンド私はこれまでのように見えます:
new_df <- df %>%
gather(key, value, -Scenario) %>%
extract(key, c("min", "mean", "max"), "regex")
これは私が苦労している正規表現です。上記に参照し、問題の答え、次の私が試してみた:
"_min|_mean|_max" --> idea being to capture the 3 different groups
私のようなルックスを取得エラー:私はこのエラーが言っていると思う何
Error in names(l) <- into :
'names' attribute [3] must be the same length as the vector [0]
は、「正規表現ではないです私はそれを渡したc("min","mean","max")
に分類する3つのグループを見つける。
これをどのような正規表現で使用できますか?それとももっと良い方法がありますか?
で複数の
patterns
を取ることができ、これはdata.table
からmelt
で簡単に行うことができます!私のカラムタイトルは実際には複数のアンダースコア(例えば、 'stat_1_min、stat_2_min')を含んでいたので、' separate 'の 'sep'引数を正規表現にする必要がありました。私が使った正規表現は '(_)(?!。* _)' – reidjax