簡體   English   中英

根據來自R?中另一個data.frame的text.values創建關聯data.frame。

[英]Create a correlation data.frame based on text.values from another data.frame in R?

背景:我有一個text.values從A到F的data.frame,基於此數據,我想通過使用以下公式計算不同公司之間的相關性data.frame(公司Aa和Cc之間的示例):

計算Aa和Cc一起移動的次數,這里是3次,然后除以周期數,這里是4。然后創建具有不同相關性的data.frame。 我不知道如何開始..一些見識將不勝感激。

我在data.frame“ databasis”中具有以下值

       company    sector    lastmarketcap   X200202 X200203 X200204 X200205       
    1   Aa           B          18            A        D      E        B
    2   Bb           A          4571          F        C      D        B
    3   Cc           E          122           A        D      E        E 
    4   Dd           Z          239           B        C      E        C

該表的代碼:

company <- c("Aa", "Bb", "Cc", "Dd") 
sector <- c("B", "A", "E", "Z") 
lastmarketcap <- c(18, 4571, 122, 239) 
X200202 <- c("A", "D", "E", "B") 
X200203 <- c("F", "C", "D", "B") 
X200204 <- c("A", "D", "E", "E") 
X200205 <- c("B", "C", "E", "C") 

databasis <- data.frame(company, sector, lastmarketcap, X200202, X200203, X200204, X200205) 

產量

          lastmarketcap  company Aa     Bb     Cc      Dd
       1       18          Aa    1     0.25   0.75    0.25
       2       4571        Bb    0.25    1      0     0.25
       3       122         Cc    0.75    0      1     0.25 
       4       239         Dd    0.25  0.25    0.25     1

預先感謝您。

使用基數R:

dat=as.data.frame(t(subset(databasis,select = -(2:3))),stringsAsFactors = F)
m= combn(dat,2,function(x)sum(Reduce("==",x)))/4
mat=diag(4)
mat[lower.tri(mat)]=m
mat[upper.tri(mat)]=t(mat)[upper.tri(mat)]
mat


    [,1] [,2] [,3] [,4]
[1,] 1.00 0.25 0.75 0.25
[2,] 0.25 1.00 0.00 0.25
[3,] 0.75 0.00 1.00 0.25
[4,] 0.25 0.25 0.25 1.00

數據:

databasis=read.table(text="    company    sector    lastmarketcap   X200202 X200203 X200204 X200205       
    1   Aa           B          18            A        D      E        B
                     2   Bb           A          4571          F        C      D        B
                     3   Cc           E          122           A        D      E        E 
                     4   Dd           Z          239           B        C      E        C")

您也可以:

dat=as.data.frame(t(subset(databasis,select = -(2:3))),stringsAsFactors = F)
m= combn(dat,2,function(x)sum(x[[1]]==x[[2]])/4)
n=combn(company,2,paste,collapse=" ")
n1=sub("(\\w+)\\s(\\w+)","\\2 \\1",n)
prob=xtabs(V3~V1+V2,read.table(text=c(paste(n,m),paste(n1,m),
                                paste(company,company,1))))
cbind(databasis[1:2],as.data.frame.matrix(prob))
 company sector   Aa   Bb   Cc   Dd
1      Aa      B 1.00 0.25 0.75 0.25
2      Bb      A 0.25 1.00 0.00 0.25
3      Cc      E 0.75 0.00 1.00 0.25
4      Dd      Z 0.25 0.25 0.25 1.00

暫無
暫無

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

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