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"]
}