我有两个问题。
for (k in 1:iterations) {
corr <- cor(df2_prod[,k], df2_qa[,k])
ifelse(is.numeric(corr), next,
ifelse((all(df2_prod[,k] == df2_qa[,k])) ), (corr <- 1), (corr <- 0))
correlation[k,] <- rbind(names(df2_prod[k]), corr)
}
这是我的要求 - 我想使用代码corr <- cor(df2_prod[,k], df2_qa[,k])
计算循环中变量的相关性。如果我收到数字的相关值,我必须保持该值不变。
有时候如果两列具有相同的值,我会收到“NA”作为矢量“corr”的输出。
x y
1 1
1 1
1 1
1 1
1 1
corr
[,1]
[1,] NA
我试图以这样的方式处理:如果收到“NA”,我将用“1”或“0”替换值。
我的问题是:
当我检查“corr”向量的类时,我将它作为“矩阵”。我想检查这是否是一个数字。除了检查is.numeric(corr)
之外还有其他方法吗?> class(corr)
[1] "matrix"
我想检查两列是否具有相同的值。类似下面的代码。如果它返回true,我想继续。但是我把代码放在循环中的方式是错误的。你能帮我解决一下如何改进这个问题:
((all(df2_prod[,k] == df2_qa[,k]))
有没有有效的方法呢?
我真诚地向读者道歉,因为框架问题/逻辑很差。如果你能告诉我可以改进代码的指针,我真的很感谢你。
答案 0 :(得分:1)
1。 你基本上想要避免使用NA,对吧?所以你可以用is.na()检查结果。
a <- rep(1, 5)
b <- rep(1, 5)
if(is.na(cor(a, b))) cor.value <- 1
2.您可以计算a的元素等于b的元素与sum(a == b)的次数,并检查该数量是否等于a(或b)中的元素数量 - &GT;长度(a)
if(sum(a==b) == length(a)) cor.value <- 1
答案 1 :(得分:1)
解释cor
函数如何工作的示例:
set.seed(123)
df1 <- data.frame(v1=1:10, v2=rnorm(10), v3=rnorm(10), v4=rnorm(10))
df2 <- data.frame(w1=rnorm(10), w2=1:10, w3=rnorm(10))
此处,df1
的第一个变量等于df2
的第二个变量。函数cor
直接应用于每个data.frame的前3个变量:
cor(df1[, 1:3], df2[, 1:3])
# w1 w2 w3
#v1 -0.4603659 1.0000000 0.1078796
#v2 0.6730196 -0.2602059 -0.3486367
#v3 0.2713188 -0.3749826 -0.2520174
您可以注意到,w2
和v1
之间的相关系数为1
,而不是NA
。
因此,在您的情况下,cor(df2_prod[, 1:k], df2_qa[, 1:k])
应该为您提供所需的输出。