2016-04-14 2 views
0

私は以下のソート済みリスト(1番目)の期間を持ち、その期間を特定の日付に分割し、リストの順序を変更することなく最大期間を抽出したい。正規表現を使用してRのネストされたリストからパターンを抽出

$`1` 
[1] "01.12.2015 - 21.12.2015" 

$`2` 
[1] "22.12.2015 - 05.01.2016" 

$`3` 
[1] "14.09.2015 - 12.10.2015" "29.09.2015 - 26.10.2015" 

したがって、調整リストの後に次のようになります。次につながる

lst_split <- str_split(lst, pattern = " - ") 

$`1` 
[1] "01.12.2015" "21.12.2015" 

$`2` 
[1] "22.12.2015" "05.01.2016" 

$`3` 
[1] "14.09.2015" "12.10.2015" "29.09.2015" "26.10.2015" 

をそうするためには、私はリストを分割して始まりました。

[[1]] 
[1] "01.12.2015" "21.12.2015" 

[[2]] 
[1] "22.12.2015" "05.01.2016" 

[[3]] 
[1] "c(\"14.09.2015"    "12.10.2015\", \"29.09.2015" "26.10.2015\")" 

次に、

lapply(lst_split, function(x) str_extract(pattern = c("\\d+\\.\\d+\\.\\d+"),x)) 

が、私の出力は1日(2015年9月29日)

[[1]] 
[1] "01.12.2015" "21.12.2015" 

[[2]] 
[1] "22.12.2015" "05.01.2016" 

[[3]] 
[1] "14.09.2015" "12.10.2015" "26.10.2015" 

が欠落している誰もが、私はそれを動作させると、多分、より効率的なソリューションを提案することができる方法のアイデアを持っています:?パターンを抽出するリート前もって感謝します。

+1

あなたの行方不明の日がstr_extract' 'によるものです - あなたは最大の日付を取得する必要があるとして、あなたは' str_extractを必要とする理由使うには、 ' –

+0

わからないstr_extract_all'。 – akrun

+0

@WiktorStribiżew、それは動作しますが、多レベルのリストの結果が操作しにくく、私はそれを避けたいと思います。 –

答えて

1

1)使用strsplitは、最大期間を取得するrangeを使用し、次いで"Date"クラスに日付を変換し、unlistを使用して各コンポーネントを平ら。パッケージは使用されません。

> lapply(lst, function(x) range(as.Date(unlist(strsplit(x, " - ")), "%d.%m.%Y"))) 
$`1` 
[1] "2015-12-01" "2015-12-21" 

$`2` 
[1] "2015-12-22" "2016-01-05" 

$`3` 
[1] "2015-09-14" "2015-10-26" 

2)もmagrittrパイプラインを使用して、この変動は、動作:

library(magrittr) 
lapply(lst, function(x) 
    x %>% 
    strsplit(" - ") %>% 
    unlist %>% 
    as.Date("%d.%m.%Y") %>% 
    range 
) 

注:再現可能な形で入力lstは:のコメントに

lst <- structure(list(`1` = "01.12.2015 - 21.12.2015", `2` = "22.12.2015 - 05.01.2016", 
`3` = c("14.09.2015 - 12.10.2015", "29.09.2015 - 26.10.2015" 
)), .Names = c("1", "2", "3")) 
+0

ありがとう@G。Grothendieck、あなたのコードはちょうど私がコードの1行で達成することを目指しているものです。 –

2

おかげ@WiktorStribiżewと@akrunはstr_extract_allを使用すれば十分です。この例では

> str_extract_all(lst,"\\d+\\.\\d+\\.\\d+") 
[[1]] 
[1] "01.12.2015" "21.12.2015" 

[[2]] 
[1] "22.12.2015" "05.01.2016" 

[[3]] 
[1] "14.09.2015" "12.10.2015" "29.09.2015" "26.10.2015" 
関連する問題