2017-09-10 8 views
1

大きなcsvファイルnew.datには100sの列名があります。私はすべての新しいサブセットの最初の列を維持する列名ごとにnew.datを分割したいとします。.csvと書かれています。大きなデータフレームを列で分割して個々のCSVに書き込む方法

new.dat

new.dat <- structure(list(Sequence = c("AAAAAACCTGTTCTGATA", "AAAAAAGGCTGTTACTGAGC", 
"AAAAACATTCGAGCGAGATCTCT", "AAAAACCTCGACTTCGGAAG", "AAAAAGCTCGTAGTTGAA", 
"AAAAAGCTCGTAGTTGAAC"), WT1 = c("84", "104", "80", "35", "112", 
"350"), WT2 = c("149", "478", "502", "186", "577", "911"), AGO1 = c("32", 
"147", "433", "51", "258", "353"), AGO2 = c("37", "222", "355", 
"85", "408", "420"), DCL1 = c("56", "185", "291", "48", "167", 
"273"), DCL2 = c("59", "176", "294", "31", "185", "245"), NAs = c(0L, 
0L, 0L, 0L, 0L, 0L)), .Names = c("Sequence", "WT1", "WT2", "AGO1", 
"AGO2", "DCL1", "DCL2", "NAs"), row.names = c(NA, 6L), class = "data.frame") 

のでnew.datデータからの結果は、7つのCSVファイルを持っている必要があります。 SequenceWT1列の最初のCSV WT1.csv、などSequenceWT2列とを有する第二csvファイルWT2.csv ..

これは私がしようとしているコードです。私がここで紛失しているものを提案してください。 ありがとう

for (name in colnames(new.dat[-1])){ 
    tmp=subset(new.dat$Sequence, colnames==name) 
    fn= name 
    #Save the CSV file 
    write.csv(tmp,fn,row.names=FALSE) 
} 
+0

をファイルに書き込むことができますことを意味しましたあなたは複数の 'WT1'列を持っていますか?もしそうなら、どんなパターンもありますか?これらはプレフィックスですか? – akrun

+0

@akrunいいえ、すべての新しいcsvファイルに 'Sequence'列と1つの追加列を残したいと思います。列名はユニークで繰り返しはありません。 – MAPK

+0

その場合は、最初の列、つまり 'lst < - Map(function(x、y、z)setNames(cbind(x、y)、c(" Sequence "、z))を使用して列とcbindをループします。 (new.dat [1])、new.dat [-1]、名前(new.dat)[ - 1]) 'を書き、csvに書き込んでください – akrun

答えて

3

我々はlapplyとの最初のものを除いて、列名を超えるだけのループ、「配列」の列を含めることによって、データセットの列のサブセットと

lapply(names(new.dat)[-1], function(nm) 
    write.csv(new.dat[c("Sequence", nm)], 
     paste0(nm, ".csv"), quote = FALSE, row.names = FALSE)) 
2

カラムインデックスを使用する方が簡単です。

for (i in 2:ncol(new.dat)) { 
    tmp=new.dat[,c(1,i)] 
    name=colnames(new.dat)[i] 
    fn = paste0(name,".csv") 
    print(fn) 
    #Save the CSV file 
    write.csv(tmp,fn,row.names=FALSE) 
} 
+0

いいえ動作しません。 – MAPK

+0

申し訳ありません。ファイルの名前を変更する部分を追加するのを忘れていました。それは今働いているはずです。 – JMenezes

関連する問題