我想获得每个县的两个变量之间的相关值。
我有如下所示的数据子集,并为各个亚当斯县获得适当的价值,但我现在想要做其他县:
CorrData<-read.csv("H://Correlation
Datasets/CorrelationData_Master_Regression.csv")
CorrData2<-subset(CorrData, CountyName=="Adams")
dzCases<-(cor.test(CorrData2$NumVisit, CorrData2$dzdx,
method="kendall"))
dzCases
我想做一个For循环或类似的东西,这会使这个过程更有效率,所以我不会为93个县中的每个县写20个不同的变量相关。
当我在R中运行以下内容时,它并没有给出错误,但它并没有给我我希望的响应。它似乎忽略了循环部分而只是给了我所有县的两个变量之间的相关性,而不是每个县的斯皮尔曼相关性。
CorrData<-read.csv("H:\\CorrelationData_Master_Regression.csv")
for (i in CorrData$CountyName)
{
dzCasesYears<-cor.test(CorrData$NumVisit, CorrData$dzdx,
method="spearman")
}
我的数据的一小部分样本与此类似:
CountyName Year NumVisits dzdx
Adams 2010 4.545454545 1.19
Adams 2011 20.83333333 0.20
Elmore 2010 26.92307692 0.24
Elmore 2011 0 0.61
Brown 2010 0 -1.16
Brown 2011 17.14285714 -1.28
Clark 2010 25 -1.02
Clark 2011 0 1.13
Cass 2010 17.85714286 0.50
Cass 2011 27.55102041 0.11
我试图在网上找到类似的例子,但我没有运气!
提前感谢您的帮助!
答案 0 :(得分:1)
你正在循环但没有使用你的迭代器&#39;我&#39;在你的代码中。如果这对于你想做的事情是有意义的(并根据你的情况判断)。根据评论,您可能希望确保使用数字。另外,我注意到你没有迭代到输出cor.test向量。我不确定循环是最有效的方法,但它会很好,因为你开始循环,你应该有类似的东西:
dzCasesYears = list() #Prep a list to store your corr.test results
counter = 0 # To store your corr.test into list through iterating
for (i in unique(CorrData$CountyName))
{
counter = counter + 1
# Creating new variables makes the code clearer
x = as.numeric(CorrData[CorrData$CountyName == i,]$NumVisit)
y = as.numeric(CorrData[CorrData$CountyName == i,]$dzdx)
dzCasesYears[[counter]] <-cor.test(x,y,method="spearman")
}
当你进行迭代时,将独特的东西放在那里总是好的。
答案 1 :(得分:0)
data.table
使这样的操作变得非常简单。
library('data.table')
CorrData <- as.data.table(read.csv("H:\\CorrelationData_Master_Regression.csv"))
CorrData[, cor(dzdx, NumVisits), CountyName]
对于样本数据,它都是负数,因为每个县有两个点,因此相关性是完美的。完整的数据集应该更有趣!
CountyName V1
1: Adams -1
2: Elmore -1
3: Brown -1
4: Clark -1
5: Cass -1
编辑以在评论中包含来自cor.test的p值作为OP询问 这也很简单!
CorrData[, .(cor=cor(dzdx, NumVisits),
p=cor.test(dzdx, NumVisits)$p.value),
CountyName]
...但它不能处理您的样本数据,因为每个县的两个点不足以让cor.test获得p值。也许您可以采用@ smci的建议和dput
更大的数据子集来使您的问题真正可重现