如何检查R中向量的变量是否为数字?

时间:2015-11-18 14:34:47

标签: r

我有两个问题。

  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”替换值。

我的问题是:

  1. 当我检查“corr”向量的类时,我将它作为“矩阵”。我想检查这是否是一个数字。除了检查is.numeric(corr)

    之外还有其他方法吗?
    > class(corr)
    [1] "matrix"
    
  2. 我想检查两列是否具有相同的值。类似下面的代码。如果它返回true,我想继续。但是我把代码放在循环中的方式是错误的。你能帮我解决一下如何改进这个问题: ((all(df2_prod[,k] == df2_qa[,k]))

  3. 有没有有效的方法呢?

    我真诚地向读者道歉,因为框架问题/逻辑很差。如果你能告诉我可以改进代码的指针,我真的很感谢你。

2 个答案:

答案 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

您可以注意到,w2v1之间的相关系数为1,而不是NA

因此,在您的情况下,cor(df2_prod[, 1:k], df2_qa[, 1:k])应该为您提供所需的输出。