我的R项目需要一些帮助。我想基于平均相对解理强度(RCI)制作矩阵。这是我的原始数据(mydata = 632 obs。的3个变量):
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:
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
我真的希望你能帮助我,提前谢谢
答案 0 :(得分: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中出现的氨基酸名称组合作为填充最终矩阵的索引。