我在Windows系统中使用R的基础包。
我有两个矩阵,它们有一列数值。两个矩阵的大小都相同。
我使用以下代码
c<-cor(x,y)
其中x
,y
是大小为10 * 1的矩阵,但c
的大小为1 * 1
输出只是一个值。当我使用cor
函数时,它应该给出一个至少等于矩阵大小的输出吗?
如果我使用summary(c)
,我的输出应该是这样的:
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.2110 -0.0500 0.0946 0.1250 0.2680 0.7630
但我得到了:
Min. :0.06088
1st Qu.:0.06088
Median :0.06088
Mean :0.06088
3rd Qu.:0.06088
Max. :0.06088
答案 0 :(得分:1)
您需要将X和Y放在data.frame或matrix中才能使用。这是一个简单的例子
set.seed(4) #so that we have the same random numbers
X<-rnorm(100)
Y<-rnorm(100)
W<-cor(data.frame(X,Y))
W
X Y
X 1.0000000 -0.1338078
Y -0.1338078 1.0000000
as.vector(W)
[1] 1.0000000 -0.1338078 -0.1338078 1.0000000
如果您愿意,可以将cor
包裹在as.vector
中以将其存储为矢量。
答案 1 :(得分:0)
那么,
首先,根据作业,你应该返回一个相关向量。其长度等于监视器的数量,满足阈值要求。(完整案例的数量大于阈值)。
让 df 是一个data.frame,它包含来自所有监视器的数据,其完整案例的数量大于阈值(希望你自己可以得到这个 df 和read.csv ,rbind功能)。所以:
让我们通过监视器ID对该数据框进行分组:
df_gb<-group_by(df,ID)
现在我们可以计算硫酸盐和硝酸盐油田之间的相关性,并按ID汇总并同时创建新的油田(变量) Cor :
dfsum<-summarize(df_gb,Cor=cor(sulfate,nitrate,use = "pairwise.complete.obs"))
然后我们只在 dfsum 数据框中留下 Cor 字段:
dfsum<-select(dfsum,Cor)
让我们排除NA结果(因为我们在函数的示例输出中看不到NA摘要,需要创建,不是吗?)
dfsum<-filter(dfsum,is.na(Cor)==FALSE)
最后我们应该返回数字向量(根据作业):
return(dfsum$Cor)
这就是全部,请不要忘记
library(dplyr)
在使用 group_by之前,选择,过滤功能。