2016-05-23 6 views
1

私のRプロジェクトにはいくつかの助けが必要です。平均相対劈開強度(RCI)に基づいて行列を作成したい。この私の生データ(MYDATA = 632 obsの3つの変数の。)である:私はこのコードを実行して、すべての可能なアミノ酸の組み合わせの平均RCIを計算するために、これまで管理してきたこれらのデータに基づいてforループで行列を作る方法

R.Int amino1 amino2 
1  14  W  I 
2  0  K  E 
3  79  Q  I 
4  80  Q  I 
5  100  K  V 
6  100  K  V 
7  100  K  P 
8  24  K  P 
9  100  K  I 
10 100  K  I 
11 100  K  I 
12 100  K  I 
13 100  K  I 
14 100  K  E 
15  4  H  E 
16  0  H  E 
17  0  F  Y 
18  0  F  Y 
19  2  E  Q 
20  2  E  Q 

for (i in x) { 
    for (j in x) { 
    sub <- subset(mydata, mydata$amino1==LETTERS[i] & mydata$amino2==LETTERS[j]) 
    g <- group_by(sub, amino1) %>% summarize(m = mean(R.Int)) 
    h <- group_by(sub, amino2) %>% summarize(m = mean(R.Int)) 
    c <- cbind(g,h) 
    d <- subset(c, select = -4) 
    neworder <- d[, c(1,3,2)] 
    n <- setnames(neworder, "m", "R.Int") 
    if (nrow(sub) > 0) 

    print(n) 
} 
} 

上記のコードは、この出力を与える:

amino1 amino2 R.Int 
1  A  L 25 
    amino1 amino2 R.Int 
1  A  E 41 
    amino1 amino2 R.Int 
1  A  R 1.25 
    amino1 amino2 R.Int 
1  A  K 80 
    amino1 amino2 R.Int 
1  A  S 4.1 
    amino1 amino2 R.Int 
1  G  G 12 
    amino1 amino2 R.Int 
1  G  L  7 
    amino1 amino2 R.Int 
1  G  W  2 
amino1 amino2 R.Int 
1  G  Y  0 
amino1 amino2 R.Int 
1  G  D 0.4 

私の質問は:どのように私はその上にマトリックスを構築するのですか?私は行列がそれぞれの可能なアミノ酸の組み合わせで平均RCI値を次のようになりたい:

A G I L P V F W Y D Q E R H K S T C M N 
N NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
M NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
c NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
T NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
S NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
K NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
H NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
R NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
E NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
Q NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
D NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
Y NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
W NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
F NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
V NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
P NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
L NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
I NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
G NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
A NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 

私は本当にあなたが私を助けることを願って、事前ここ

答えて

1

でのおかげで、あなたがこれを達成することができます一つの方法です:

# construct example data frame 
set.seed(1234) 
df <- data.frame(R.int=sample(1:100, 25, replace=T), amino1=sample(letters[1:5], 25, replace=T), amino2=sample(letters[1:5], 25, replace=T), stringsAsFactors=F) 

# make sure that amino1 and amino2 are character variables (not factors) 
df$amino1 <- as.character(df$amino1) 
df$amino2 <- as.character(df$amino2) 

# calculate mean for each amino acid combination 
dfAgg <- aggregate(cbind("R.Int"=R.Int)~amino1 + amino2, data=df, FUN=mean) 

# construct matrix for storage, give it row and column names of amino acids 
myMat <- matrix(0, nrow=length(unique(dfAgg$amino1)), ncol=length(unique(dfAgg$amino2))) 
rownames(myMat) <- unique(dfAgg$amino1) 
colnames(myMat) <- unique(dfAgg$amino2) 

# fill in the values 
myMat[cbind(dfAgg$amino1, dfAgg$amino2)] <- dfAgg$R.Int 

このメソッドが機能するには、アミノ酸変数が文字型(つまり、要素ではない)である必要があります。最後の行は、dfAgg data.frameに表示されるアミノ酸の名前の組み合わせをインデックスとして使用して、最終マトリックスを埋めます。

+0

こんにちは、すぐにお返事ありがとうございます。しかし、私はまだ正しい方法で問題を解決しています。私はアミノの変数を "文字"に変換しましたが、最後の行に行くと値が入ります:myMat [cbind(dfAgg $ amino1、dfAgg $ amino2)]のエラー - dfAgg $ R .int:置換には長さゼロがあります – Pede

+0

2列と多くの行がありますが、文字はありません – Pede

+0

残念ながら、そうではありません。 – Pede

関連する問題