2016-05-27 6 views
1

私は数千の行を持つdata.frameを持っています。私はこのデータのサブセットに数行のコードを適用しています。異なるサブセットでコードを実行

私はコラム "mergeorderの$門" の4つのサブセットがあります。

[1] "ascomycota"  "basidiomycota" "unidentified" 
[4] "chytridiomycota" 

と私は別に関数のこのセットを適用する必要があり、すべてのサブセット上:

ascomycota<-mergeorder[mergeorder$phylum %in% c("ascomycota"), ] 
group_ascomycota <- aggregate(ascomycota[,2:62], by=list(ascomycota$order), FUN=sum) 

row.names(group_ascomycota)<-group_ascomycota[,1] 
group_ascomycota$sum <-apply(group_ascomycota[,-1],1,sum) 

dat5 <-sweep(group_ascomycota[,2:62], 2, colSums(group_ascomycota[2:62]), '/') 
dat5$sum <-apply(group_ascomycota[,-1],1,sum) 
reorder_dat5 <- dat5[order(dat5$sum, decreasing=T),] 

reorder_dat5$OTU_ID <- row.names(reorder_dat5) 
FINITO<-reorder_dat5[1:15,] 

write.table(FINITO, file="output_ITS1/ITS1_ascomycota_order_top15.csv", col.names=TRUE,row.names=FALSE, sep=",", quote=FALSE) 

このコードの動作を。しかし、私は、 "子嚢虫"を "担子菌"、 "未同定"、 "狂犬病菌"に手動で置き換えずにこのコードを適用したいと考えています。

どの機能を使用しますか?私はそれをどのように使うべきですか?私はsapply()repeat()と苦労してきましたが、遠くに来ていません。

最終結果は、コード全体を実行し、csv別ファイルをエクスポートする必要があります。あなたの答え

答えて

2

ため

多くのおかげでそれは一度にすべてのサブセットを処理するコードを記述することは通常可能です。しかし、あなたがやっていることはかなり複雑です。最も良いことは、すべてを関数に集めて、各サブセットの関数を実行することです。このような何か:

subset_transform <- function(subset){ 
    t <-mergeorder[mergeorder$phylum %in% c(subset), ] 
    group_t <- aggregate(t[,2:62], by=list(t$order), FUN=sum) 

    row.names(group_t)<-group_t[,1] 
    group_t$sum <-apply(group_t[,-1],1,sum) 

    dat5 <-sweep(group_t[,2:62], 2, colSums(group_t[2:62]), '/') 
    dat5$sum <-apply(group_t[,-1],1,sum) 
    reorder_dat5 <- dat5[order(dat5$sum, decreasing=T),] 

    reorder_dat5$OTU_ID <- row.names(reorder_dat5) 
    FINITO<-reorder_dat5[1:15,] 

    write.table(FINITO, file = paste("output_ITS1/ITS1_", subset, "_order_top15.csv"), col.names=TRUE,row.names=FALSE, sep=",", quote=FALSE) 
} 

subset_transform("ascomycota") 
subset_transform("basidiomycota") 
subset_transform("unidentified") 
subset_transform("chytridiomycota") 
+0

ではなく関数の内部サブセットのコードを入れて、それがその後、 'dplyr :: do'または'データでうまく動作することができた、サブセット化が行われていると仮定し関数を記述するためにはかなり一般的です.table'あるいは 'base :: split'と' lapply'を使っています。 – Gregor

+0

@Gregorそれは素敵なアイデアだろう、ありがとう:)私はそれを書き直そうとしましたが、それは書かれていたテーブルの名前を付けるのが少し厄介なことになりました(とにかく私が管理できる限り)。私は次回もそれを念頭に置いておきます。 –

+0

私はその時点で名前を 'df [1、 'phylum']'としています。 – Gregor

関連する問題