R 共享名称的列之间的相关性

R 共享名称的列之间的相关性,r,correlation,R,Correlation,我有一个大的数据框,上面有数据来自哪个站点的信息,一个名称,一个代码,然后是一个空行,然后是数据 Site Site1 Site1 Site1 Site1 Site2 Site2 Name A B C D E F Code A12 A41 A32 A33 A21 A12 - 3.2 4.2 5.2 3.1 1.11 2.52 - 9.2 0.21 3.12 3.03 2.12

我有一个大的数据框,上面有数据来自哪个站点的信息,一个名称,一个代码,然后是一个空行,然后是数据

Site Site1 Site1 Site1 Site1 Site2 Site2
Name  A     B      C     D    E      F
Code A12    A41   A32   A33   A21    A12 

-    3.2    4.2   5.2    3.1   1.11   2.52
-    9.2    0.21  3.12   3.03  2.12   5.12
....
所以我要做的是在“代码”行中找到所有具有相同值的值,或者将它们提取到一个单独的数据帧中,然后计算相关性,或者直接计算它们之间的相关性

最后我想要的是:

SiteA  SiteB  Correlation NameA NameB
Site1  Site2    .87        A12   A12
Site4  Site8    .76        B32   B32
我不知道之前我会有多少个网站,但我只是在相关的时候插入代码是相同的

我试图在一个单独的数据框中提取信息(前3行),并试图将每个站点放在其自己的数据框中,但未能做到这一点。

首先,您需要“旋转”数据框。。。 例如,您可以使用transpose()或Reformate()并调用新的数据帧DF

当数据帧DF包含名为“Site”、“Name”、“Code”、“X1”、“X2”(等)的列时,可以使用:

DF$Code <- as.factor(DF$Code)
因为您有数百种不同的代码,所以您必须进一步使用脚本。。。 您可以使用以下工具检查每个代码在数据帧中出现的次数:

table(DF$Code)
得到一个向量,其中包含+-100个重复代码,其中:

Dx <- as.data.frame(table(DF$Code))
Repeated_codes <- Dx$Var1[which(Dx$Freq)>1]

Dx如果您可以使用
dput
将您的数据作为一个可复制的示例共享,那就太好了。为什么数据是这样设置的?对于每个列都是相同的原子类型(char、int、factor、num),转置版本会更有意义。问题是大约有1000个代码。我认为其中大约有100个有相同的代码。
Dx <- as.data.frame(table(DF$Code))
Repeated_codes <- Dx$Var1[which(Dx$Freq)>1]
final_df <- data.frame(Site_X=character(),
Site_Y=character(),
Correlation=integer(),
Name_X=character(),
Name_Y=character(),
stringsAsFactors=FALSE)
for (i in c(1:length(Repeated_codes))){
Code_x <- Repeated_codes[i]
DFi <- DF[which(DF$Code == Code_x),]
cor_i <- cor(DFi$X1, DFi$X2) 
final_df[i,"Site_X"] <- DFi[1,"Site"]
final_df[i,"Site_Y"] <- DFi[2,"Site"]
final_df[i,"Correlation"] <- round(as.numeric(cor_i$estimate)
final_df[i,"Name_X"] <- DFi[1,"Code"]
final_df[i,"Name_Y"] <- DFi[2,"Code"]
}