簡體   English   中英

使用R的相鄰相關性對有序元素進行分組變量

[英]grouping variable for ordered elements using adjecent correlation using R

我有按順序排列的“標記”變量,“標記”的后續成員之間的相關性在corr變量中提供。

markr <- c("A", "B", "C", "D", "E",  "g", "A1", "B1", "cc", "dd", 
     "f", "gg", "h", "K")
corr <- c(     1,   1,   1,   1, 0.96,   0.5,  0.96,        1 ,   1 ,  
       1 ,  0.85, 0.99, 1)

我需要基於corr將標記分組,而無需更改標記成員的順序。 下圖可以更好地解釋該組:

在此處輸入圖片說明

corr大於0.95的標志標記的單個成員將在一組中。 當corr下降到小於0.95時從第一個值開始,然后開始第二組並繼續直到corr再次下降到0.95以下,該過程繼續到數據結束。 組變量由組中的第一個和最后一個成員命名,例如-Ag,A1-f,gg-k。

因此,預期輸出是。

markr <- c("A", "B", "C", "D", "E",  "g", 
           "A1", "B1", "cc", "dd", "f", 
           "gg", "h", "K")
group <- c("A-g", "A-g", "A-g", "A-g","A-g", "A-g", 
           "A1-f",  "A1-f",  "A1-f",  "A1-f","A1-f", 
            "gg-k", "gg-k", "gg-k")
dataf <- data.frame (markr, group) 

dataf 

 markr group
1      A   A-g
2      B   A-g
3      C   A-g
4      D   A-g
5      E   A-g
6      g   A-g
7     A1  A1-f
8     B1  A1-f
9     cc  A1-f
10    dd  A1-f
11     f  A1-f
12    gg  gg-k
13     h  gg-k
14     K  gg-k

我有這么大的數據集,該如何自動執行此過程。

該組的數目是到目前為止我們看到的0.95以下的值的數目:

d1 <- data.frame(
  marker = markr,
  group = cumsum(c(1, corr < .95))
)

對於組名,您可以使用ddply將data.frame切成碎片,每組一個:然后可以輕松提取第一個和最后一個元素。

library(plyr)
d2 <- ddply( 
  d1, "group", summarize, 
  group_name=paste(head(marker,1), tail(marker,1), sep="-")
)
d <- merge(d1, d2, by="group")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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