2017-01-31 4 views
0

私はbind_rowsを使ってdata.frameを2つの異なるリストにマージし、それぞれしきい値で分割し、結果をcsv個のファイルとしてエクスポートします。これまでのところ、エクスポートされたすべてのファイルが1つのデフォルトフォルダに移動する以外はすべてが良好です。 csvすべてのファイルを1つの場所に入れるのではなく、ファイルバー(つまり、ファイルバーの名前を参照するdata.frame hueackken)の別のフォルダにdata.frameのリストを割り当てることができます。各ファイルバーの出力を簡単に閲覧することができます)。これをどうすればいいのですか? data.frameのリストをファイルバーの別のフォルダに割り当てて、csvとして書き込むことは可能ですか?何か案が?ここでdata.frameのリストを再編成し、 `csv`として別のフォルダにエクスポートするには?

は、私が一緒に仕事をしたい、最小限の例data.frameです:ここで

Positive <- list(
    hue = data.frame(begin=seq(1, by=6, len=20), end=seq(4, by=6, len=20), pos.score=sample(30, 20)), 
    ack = data.frame(begin=seq(3, by=9, len=15), end=seq(6, by=9, len=15), pos.score=sample(28, 15)), 
    ken = data.frame(begin=seq(6, by=8, len=18), end=seq(11, by=8, len=18), pos.score=sample(22, 18)) 
) 

Negative <- list(
    hue = data.frame(begin=seq(9, by=12, len=30), end=seq(14, by=12, len=30), pos.score=sample(35, 30)), 
    ack = data.frame(begin=seq(13, by=10, len=20), end=seq(19, by=10, len=20), pos.score=sample(34, 20)), 
    ken = data.frame(begin=seq(23, by=11, len=24), end=seq(31, by=11, len=24), pos.score=sample(27, 24)) 
) 

は、データを分類するためのソリューションです:私はexportMeを把握したい

res <- bind_rows(c(positive = Positive, 
        negative = Negative), .id = "id") %>% 
    separate(id, c("status", "Candidate")) %>% 
    mutate(TF = ifelse(pos.score >= 18, 
            "true", "false")) %>% 
    split(list(.$Candidate, .$TF, .$status)) 

exportME <- mapply(write.csv, res, paste0(names(res), ".csv")) 

は、上に配置することができファイルバーの別のフォルダ。 exportMeを押す前に、コードはdata.frameのリストを目的のフォルダに配布し、csvとしてエクスポートする方法を知っていなければなりません。これを行うための巧妙な方法はありますか?これを達成するためのプログラマティックでダイナミックな方法はありますか?私の所望の出力で

、各フォルダは、各フォルダには、以下の構造を有しているhueackken、として指名することができます。

xx.true.positive.csv 
xx.true.negative.csv 
xx.false.positive.csv 
xx.false.nagative.csv 

は、どのように私はこれを実現することができますか?これを行うためのスマートな方法はありますか?どのように私は希望の出力を達成することができますか?ありがとうございます。

答えて

2

あなたは、すでに色相、感性、剣という3つのフォルダがあるとします。あなたがそれらを持っていない場合は、あなたが最初に作成することができ :

  • は、フォルダ名

    dir_names <- gsub("\\..+","",names(res)) %>% unique()

    > dir_names [1] "ack" "hue" "ken"

  • を取得し、その後dir.create

    を使用してフォルダを作成

    walk(dir_names,dir.create)

THEN、あなたはそれに応じて、それぞれ1でCSVファイルを保存することができます:

  • gsub("\\..+","",y)が前に文字列を抽出し、Y

    purrr::walk2(res,names(res), 
         function(x,y) 
         write.csv(x,paste0(gsub("\\..+","",y),"/",y,".csv"))) 
    
    • あなたはxと解像度、および名前(RES)を通過し、最初の期間(すなわちフォルダ名)、例えば:

    > gsub("\\..+","","ack.false.negative") [1] "ack

    • 結果は、ファイルのパスを形成するために、paste0に使用されます。あなたは私を誤解

    "ack/ack.false.negative.csv"

  • +0

    、私は 'hue'、' ack'、 'ken'を作成しないでください、私はプログラム的な方法でコードすることによって、それらを作成したい、そしてcsv''として執筆を進めます。それは実践ですか? – Dan

    +0

    編集した回答を確認してください。それは意味ですか? – OmaymaS

    +0

    はい、私にはうまくいきます。パイプ演算子を使用して各ステップを接続することは可能ですか?コード本体を最小限に抑えるようにしてください(すべてのコード行を小さくエレガントにする)。ところで、これは素晴らしい仕事です、ありがとう。 – Dan

    関連する問題