簡體   English   中英

如何創建for循環以從R中的數據幀中獲取相關性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM