我有以下的数据帧:
df <- data.frame(stat = c(3.38, -3.40, 4.45, -4.21, 3.33),
patient1 = c(-0.44, -0.22, 0.80, -0.21, -0.22),
patient2 = c(0.40, 0.045, -0.14, -0.078, -0.16),
patient3 = c(0.35, 0.21, -0.23, -0.019, -0.21),
row.names = c("gene1","gene2","gene3","gene4","gene5"))
> df
stat patient1 patient2 patient3
gene1 3.38 -0.44 0.400 0.350
gene2 -3.40 -0.22 0.045 0.210
gene3 4.45 0.80 -0.140 -0.230
gene4 -4.21 -0.21 -0.078 -0.019
gene5 3.33 -0.22 -0.160 -0.210
我一直在苦苦寻找如何编写脚本或循环来计算“stat”列和每个患者列的乘积总和,因为我的患者数据集中有141列和142行需要完成此工作。
因此,我想要一个名为“Signature Score”的新行,其计算值如下:
row.names(df)[nrow(df)] <- "Signature Score"
sum_multi_1 <- sum(df[c(1:nrow(df)-1),2]*df[c(1:nrow(df)-1),1])
sum_multi_2 <- sum(df[c(1:nrow(df)-1),3]*df[c(1:nrow(df)-1),1])
sum_multi_3 <- sum(df[c(1:nrow(df)-1),4]*df[c(1:nrow(df)-1),1])
df[nrow(df),2] <- sum_multi_1
df[nrow(df),3] <- sum_multi_2
df[nrow(df),4] <- sum_multi_3
which is...
> df
stat patient1 patient2 patient3
gene1 3.38 -0.4400 0.40000 0.35000
gene2 -3.40 -0.2200 0.04500 0.21000
gene3 4.45 0.8000 -0.14000 -0.23000
gene4 -4.21 -0.2100 -0.07800 -0.01900
gene5 3.33 -0.2200 -0.16000 -0.21000
Signature Score NA 2.9723 0.37158 -1.17381
我试图制作一个类似这样的for循环...
for (i in 1:nrow(df)){
df[nrow(df),i+1] <- sum(df[c(1:nrow(df)-1,i+1)]*df[c(1:nrow(df)-1),1])
}
但它没有完成任务。请问有人能告诉我我错了什么或需要写什么吗?
祝一切顺利, Tj