2011-12-31 9 views
3

大規模なCSVファイルの形式で提供される遺伝子検査の結果をグラフ化しようとしています。 CSVの各x、y位置は数字スコアであり、その大部分はゼロです。私は非ゼロのデータだけに興味があります。また、各XおよびYタイトルの名前には、データをさらにサブセット化するために使用したい追加情報があります。私がしたいのは、データを溶かし、すべての行をゼロ値で取り除き、溶かしたデータを文字列で分割して、キャストに使用できる余分な列を与えます。しかし、溶かしたデータを文字列分割しようとすると問題に遭遇します。ここでは、コマンドといくつかのサンプルデータは以下のとおりです。解凍データセット

test <- read.csv("~/Documents/Bioinformatics/Python_Scripts/test.csv", as.is=TRUE) 
smalltest <- test[1:10, 1:4] 
small.melt <- melt(smalltest) 
head(smalltest) 
head(small.melt) 

これは、以下のデータになり:私は、文字列分割しようとすると、しかし

head(small.test) 
BlastCompare Triostin_A_2 Triostin_A_1 Myxochelin_2 Myxochelin_1 
HA9WEQA05FUABT_497_TxR_K2   0   0  105   120 
G9VUOJT08JA64I_426_TxC_N3   0   0 0   0 
HA9WEQA06G2SFP_457_TxC_J4   0   0  0   0 
HA9WEQA05GCP8Q_506_TxR_J7   150   150 0   0 
HA9WEQA07HU6MW_421_TxR_P7   0   0 0   0 
G9VUOJT05FST3W_399_TxR_J4   0   0 255   240 

ヘッド(small.melt)

BlastCompare  variable value 
HA9WEQA05FUABT_497_TxR_K2Triostin_A_2  0 
G9VUOJT08JA64I_426_TxC_N3 Triostin_A_2  0 
HA9WEQA06G2SFP_457_TxC_J4 Triostin_A_2  0 
HA9WEQA05GCP8Q_506_TxR_J7 Triostin_A_2 150 
HA9WEQA07HU6MW_421_TxR_P7 Triostin_A_2  0 
G9VUOJT05FST3W_399_TxR_J4 Triostin_A_2  0 

$変数の列には、次の結果が表示されます。

small.melt$name <- sapply(strsplit(small.melt$variable, "_") , "[", 1) 
Error in strsplit(small.melt$variable, "_") : non-character argument 

理由について考えてみませんか?またはこれを回避する方法は?

感謝 ザックのCP

答えて

4

問題はstrsplit()が最初の引数として文字ベクトルを期待しながらsmall.melt$variableは、クラスの要因であるということです。

f <- as.factor(c("a_b", "a_c")) 
strsplit(f, "_") 
Error in strsplit(f, "_") : non-character argument 

strsplit()を幸せにするためには、単に文字ベクトルに係数を変換するas.character()を使用します:

(これはかなりそれは上記と下記のストリップダウンの例で返すエラーメッセージでようを示します)
sapply(strsplit(as.character(small.melt$variable), "_") , "[", 1) 
# [1] "Triostin" "Triostin" "Triostin" "Triostin" "Triostin" 
# [6] "Triostin" "Triostin" "Triostin" "Triostin" "Triostin" 
# [11] "Triostin" "Triostin" "Myxochelin" "Myxochelin" "Myxochelin" 
# [16] "Myxochelin" "Myxochelin" "Myxochelin" "Myxochelin" "Myxochelin" 
# [21] "Myxochelin" "Myxochelin" "Myxochelin" "Myxochelin" 
+1

ありがとうございました。スクリプトの上部にオプション(stringsAsFactors = FALSE)があり、as.is = Trueを使用してcsvをインポートしましたが、要因はとにかく滑っていました。 – zach

+2

私は、あなたが** smalltest **から** small.melt **に行ったとき、 'melt()'が列名を要素に変換したと確信しています。 –

+1

重要な場合に備えて、列の順序を保持するために溶かします。ファクタを自動的に因数に変換するstringrパッケージも参照してください。そして、colsplit関数... – hadley