簡體   English   中英

同一列變量之間的相關性

[英]Correlation between variable in the same column

我有一個 dataframe df。 挑戰在於分類變量在同一列中,而值在另一列中。 我需要 plot 相關性而不轉換數據集。 這里是

   df
   Date             B      C
   2019-09-09     Cat1     2
   2019-09-10     Cat1     3
   2019-09-11     Cat1     5
   2019-09-09     Cat2     7
   2019-09-10     Cat2     9
   2019-09-11     Cat2     10  

如果您仔細觀察,我需要 plot Cat1 和 Cat2 之間的相關性,以獲得 C 列中的值與日期。 有辦法嗎? 2 列中的類別可能超過 2。但是如果變量在同一列中,我們如何 plot 呢?

假設我們有 dataframe df,如下所示。 在這很容易 plot

   df
   Date               Cat1   Cat2
   2019-09-09          2        7
   2019-09-10          3        9 
   2019-09-11          5        10

在這種情況下,我們可以使用下面的代碼

  ggplot(df, aes(x=Cat1, y=Cat2))+geom_point()

使用tidyr package 應該很容易。 見下文:

library(tidyr)

df <- data.frame(Date = c("2019-09-09","2019-09-10","2019-09-11","2019-09-09","2019-09-10","2019-09-11"),
                         B = c(rep("Cat1",3),rep("Cat2",3)),
                         C = c(2,3,5,7,9,10))

df.tidy <- spread(df, key = B, value = C)

df.tidy

#           Date Cat1 Cat2
#   1 2019-09-09    2    7
#   2 2019-09-10    3    9
#   3 2019-09-11    5   10

根據您在評論中的說明,看來這就是您想要的。

library(ggplot2)

ggplot(df, aes(x=Date, group = B)) + 
  geom_line(aes(y = C, color = B))

您需要通過將帶有組的列傳遞給 group 參數來指定變量的分組方式。 然后將 y 值傳遞給geom_line()調用中的aes() function。 您可以根據組為線條添加顏色。

請注意,這不是相關性,因此您的問題具有誤導性。

編輯

對於 plot 而言,在不轉換數據的情況下 Cat1 與 Cat2 比較棘手。 我不知道如何在不轉換數據的情況下執行此操作,但是由於您堅持認為這不是您想要的,因此另一種方法是創建一個臨時 function,其中數據在 function 中進行轉換,並在轉換后的數據上使用 ggplot在 function 和 plot 中返回。 轉換后的數據僅在 function 的 scope 中定義,因此不會在全局環境中

gg_group_point <- function(x, group, values){

  df <- x

  xy_key <- colnames(x[,group, drop = F])

  xy_val <- colnames(x[,values, drop = F])

  df_transformed <- spread(df, key = xy_key, value = xy_val)

  xpos <- colnames(df_transformed[, 2, drop = F])

  ypos <- colnames(df_transformed[, 3, drop = F])

  p <- ggplot(df_transformed, aes_string(x=xpos, y=ypos)) + geom_point()

  return(p)
}

將具有 x 和 y 軸變量的列的列索引提供給 group 參數,並將具有值的列提供給 values 參數。

df3 <- df[, c('B', 'Date', 'C')]

gg_group_point(df3, group = 1, values = 3)

我已經切換了列,以確保即使分組變量不在第二列中也能正常工作。 唯一需要注意的是,這僅在您有兩個變量時才有效。 除此之外,您將需要多個 xy 圖或可能的多面 plot。

暫無
暫無

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

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