は数

2017-11-22 1 views
0

で始まる文字列を繰り返すようにどのようにこれは、私は次の出力を取得したい私のデータは数

df <- structure(list(V1 = structure(c(1L, 5L, 5L, 1L, 5L, 5L, 5L, 5L, 
NA, NA, NA, NA, 4L, 2L, 3L), .Label = c("1 x Bruit (U)", "1 x Bruit (U) 1 x TAMAN (M)", 
"1 x Bruit (U) 2 x TAMAN (M)", "1 x TAMAN (M) 2 x TAMAN (M)", 
"2 x Bruit (U)"), class = "factor"), V2 = structure(c(1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L), .Label = c("BUX1_T10963", 
"BUX1_T10964", "BUX1_T10965"), class = "factor")), .Names = c("V1", 
"V2"), class = "data.frame", row.names = c(NA, -15L)) 

です。番号の後に繰り返される 基本的に場所が、私はそれが我々がdplyrtidyrを使用することができます

1 x Bruit (U) BUX1_T10963 
2 x Bruit (U) BUX1_T10963 
2 x Bruit (U) BUX1_T10963 
1 x Bruit (U) BUX1_T10964 
2 x Bruit (U) BUX1_T10964 
2 x Bruit (U) BUX1_T10964 
2 x Bruit (U) BUX1_T10964 
2 x Bruit (U) BUX1_T10964 
NA    BUX1_T10964 
NA    BUX1_T10964 
NA    BUX1_T10964 
NA    BUX1_T10964 
1 x TAMAN (M) BUX1_T10965 
2 x TAMAN (M) BUX1_T10965 
1 x Bruit (U) BUX1_T10965 
1 x TAMAN (M) BUX1_T10965 
1 x Bruit (U) BUX1_T10965 
2 x TAMAN (M) BUX1_T10965 

答えて

3

の下にそれを1行を繰り返します。キーはseparate_rowsを使用し、sep引数に正規表現を指定することです。正規表現のlookaheadとlookbehindの詳細については、こちら(http://www.rexegg.com/regex-lookarounds.html)を参照してください。

library(dplyr) 
library(tidyr) 

df2 <- df %>% 
    separate_rows(V1, sep = "(?<=\\))\\s(?=[0-9]+)") %>% 
    select(names(df)) 
df2 

#    V1   V2 
# 1 1 x Bruit (U) BUX1_T10963 
# 2 2 x Bruit (U) BUX1_T10963 
# 3 2 x Bruit (U) BUX1_T10963 
# 4 1 x Bruit (U) BUX1_T10964 
# 5 2 x Bruit (U) BUX1_T10964 
# 6 2 x Bruit (U) BUX1_T10964 
# 7 2 x Bruit (U) BUX1_T10964 
# 8 2 x Bruit (U) BUX1_T10964 
# 9   <NA> BUX1_T10964 
# 10   <NA> BUX1_T10964 
# 11   <NA> BUX1_T10964 
# 12   <NA> BUX1_T10964 
# 13 1 x TAMAN (M) BUX1_T10965 
# 14 2 x TAMAN (M) BUX1_T10965 
# 15 1 x Bruit (U) BUX1_T10965 
# 16 1 x TAMAN (M) BUX1_T10965 
# 17 1 x Bruit (U) BUX1_T10965 
# 18 2 x TAMAN (M) BUX1_T10965