[英]How to create a for loop to obtain correlations from a data frame in R?
我有以下數據框:
Gene <- c("1","2","3","4","5","6")
A1.1 <- c(1,1,2,4,3,5)
B1.1 <- c(1,2,3,4,5,6)
C1.1 <- c(2,2,3,5,5,5)
A1.2 <- c(1,2,3,5,5,5)
B1.2 <- c(3,2,5,6,6,6)
C1.2 <- c(1,1,2,2,4,6)
df <- data.frame(Gene, A1.1, B1.1, C1.1, A1.2, B1.2, C1.2)
Gene A1.1 B1.1 C1.1 A1.2 B1.2 C1.2
1 1 1 1 2 1 3 1
2 2 1 2 2 2 2 1
3 3 2 3 3 3 5 2
4 4 4 4 5 5 6 2
5 5 3 5 5 5 6 4
6 6 5 6 5 5 6 6
所以我需要獲取同一個字母的列之間的相關值。 因此獲得 A1.1 和 A1.2、B1.1 和 B1.2、C1.1 和 C1.2 的相關值,總共 3 個相關值。
我可以通過對每個(例如cor(df$A1.1, df$A1.2)
)使用cor()
function 來做到這一點,但是我可以創建一個 for 循環來獲得所有這些的相關性一次?
您可以使用split.default
:
sapply(split.default(df[-1], sub('.\\d+$', '', names(df)[-1])),
function(x)cor(x[[1]], x[[2]]))
A1 B1 C1
0.9042908 0.8546548 0.7656415
如果有許多具有相同名稱的列:
lapply(split.default(df[-1], sub('.\\d+$', '', names(df)[-1])), cor)
$A1
A1.1 A1.2
A1.1 1.0000000 0.9042908
A1.2 0.9042908 1.0000000
$B1
B1.1 B1.2
B1.1 1.0000000 0.8546548
B1.2 0.8546548 1.0000000
$C1
C1.1 C1.2
C1.1 1.0000000 0.7656415
C1.2 0.7656415 1.0000000
如果您有更多具有相同字母的列,則相關矩陣可能更方便使用,因為您需要將所有列與所有其他列進行比較
cor_list <- list()
col_names <- colnames(df[-1])
column_letters <- unique(substr(col_names, 1, 1))
for (let in column_letters){
indices <- substr(colnames(df),1, 1) == let
cor_list[[let]] <- cor(df[indices])
}
當您的列如圖所示排列整齊時,您可以關聯這些對。
sapply(0:2, function(i) cor(df[, 2 + i], df[, 5 + i]))
# [1] 0.9042908 0.8546548 0.7656415
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.