1

ファイル パスの文字ベクトルがあります。

> tail(paths)
[1] "/home/username/data/dir/GCZ98/GCZ98_1998_12_16.asc.gz"
[2] "/home/username/data/dir/GCZ98/GCZ98_1998_12_20.asc.gz"
[3] "/home/username/data/dir/GCZ99/GCZ99_1999_12_21.asc.gz"
[4] "/home/username/data/dir/GCZ99/GCZ99_1999_12_23.asc.gz"
[5] "/home/username/data/dir/GCZ99/GCZ99_1999_12_27.asc.gz"
[6] "/home/username/data/dir/GCZ99/GCZ99_1999_12_28.asc.gz"

これを、親フォルダー名ごとにベクトルのリストに分割したいと思います。

> tail(desired)
$ "/home/username/data/dir/GCZ98"
[1] "/home/username/data/dir/GCZ98/GCZ98_1998_12_16.asc.gz"
[2] "/home/username/data/dir/GCZ98/GCZ98_1998_12_20.asc.gz"
$ "/home/username/data/dir/GCZ98"
[1] "/home/username/data/dir/GCZ99/GCZ99_1999_12_21.asc.gz"
[2] "/home/username/data/dir/GCZ99/GCZ99_1999_12_23.asc.gz"
[3] "/home/username/data/dir/GCZ99/GCZ99_1999_12_27.asc.gz"
[4] "/home/username/data/dir/GCZ99/GCZ99_1999_12_28.asc.gz"

私は試してみsplitましstrsplitたが、ほとんど成功しませんでしたが、私のニーズを満たす正規表現を見つけるのに苦労しています。

助けてくれてありがとう

4

2 に答える 2

4

splitとを組み合わせることができますdirname

path <- c("/home/username/data/dir/GCZ98/GCZ98_1998_12_16.asc.gz",
          "/home/username/data/dir/GCZ98/GCZ98_1998_12_20.asc.gz",
          "/home/username/data/dir/GCZ99/GCZ99_1999_12_21.asc.gz",
          "/home/username/data/dir/GCZ99/GCZ99_1999_12_23.asc.gz",
          "/home/username/data/dir/GCZ99/GCZ99_1999_12_27.asc.gz",
          "/home/username/data/dir/GCZ99/GCZ99_1999_12_28.asc.gz")

## split by basedir
split(path, dirname(path))

# $`/home/username/data/dir/GCZ98`
# [1] "/home/username/data/dir/GCZ98/GCZ98_1998_12_16.asc.gz" "/home/username/data/dir/GCZ98/GCZ98_1998_12_20.asc.gz"
# 
# $`/home/username/data/dir/GCZ99`
# [1] "/home/username/data/dir/GCZ99/GCZ99_1999_12_21.asc.gz" "/home/username/data/dir/GCZ99/GCZ99_1999_12_23.asc.gz" "/home/username/data/dir/GCZ99/GCZ99_1999_12_27.asc.gz"
# [4] "/home/username/data/dir/GCZ99/GCZ99_1999_12_28.asc.gz"
于 2013-08-30T15:18:01.797 に答える
2

正規表現のアプローチ:

> split(paths, gsub("(.*)/[^/]+$", "\\1", paths))
$`/home/username/data/dir/GCZ98`
[1] "/home/username/data/dir/GCZ98/GCZ98_1998_12_16.asc.gz"
[2] "/home/username/data/dir/GCZ98/GCZ98_1998_12_20.asc.gz"

$`/home/username/data/dir/GCZ99`
[1] "/home/username/data/dir/GCZ99/GCZ99_1999_12_21.asc.gz"
[2] "/home/username/data/dir/GCZ99/GCZ99_1999_12_23.asc.gz"
[3] "/home/username/data/dir/GCZ99/GCZ99_1999_12_27.asc.gz"
[4] "/home/username/data/dir/GCZ99/GCZ99_1999_12_28.asc.gz"
于 2013-08-30T15:19:25.243 に答える