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