2016-05-23 33 views
1

我需要一些幫助來爲我的R項目。我想根據平均相對分裂強度(RCI)製作一個矩陣。這是我的原始數據(MYDATA = 632個觀測3個變量。):如何在基於這些數據的for循環中製作矩陣

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) 
} 
} 

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 

我已經通過執行此代碼到目前爲止成功地計算平均RCI爲所有可能的氨基酸的組合

上面的代碼給出了這樣的輸出:

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

兩列和很多行,但沒有字符 – Pede

+0

不幸的是,情況並非如此。 – Pede