2017-03-27 42 views
-2

我搜索了之前的帖子,他们发现这个错误消息的原因:缺少TRUE/FALSE所需的值是由于na值。不过,我之前删除了我所有的NA值,所以我很困惑,为什么我得到这个错误信息。我写了一个函数来计算一列中的值是否大于使用控制流的另一列中的值。我是R的初学者,所以我非常感谢任何关于我做错了什么的建议。我的代码如下:'删除所有需要TRUE/FALSE'的缺失值'

testfunction<-function(x){ 
    x_2_columns=data.frame(x[34],x[23]) 
    x_2_columns_no_na=na.omit(x_2_columns) 
    counter=0 
    x_2_columns_no_na[,1]<-as.numeric(x_2_columns_no_na[,1]) 
    x_2_columns_no_na[,2]<-as.numeric(x_2_columns_no_na[,2]) 
    for(i in 1:nrow(x_2_columns_no_na)){ 
    if (x_2_columns_no_na[i,1]>x_2_columns_no_na[i,2]) 
    {counter=counter+1 
    } 
    } 
    return(counter) 
} 

testoutput<-apply(df, 1, testfunction) 

非常感谢您的帮助

回答

0

您可以使用适用于环比data.frame。这意味着您的testfunction获取输入向量,并将其作为新的数据帧。接下来通过调用na.omit(x_2_columns)您介绍以下情况:

df <- data.frame(V1 = 1, V2 = NA) 
na.omit(df) 
# [1] V1 V2 
# <0 rows> (or 0-length row.names) 

导致错误以后。

+0

谢谢你的帮助。在阅读你的解释之后,我修改了代码。我现在得到多个1和0的输出,而不是计数器的数字。当我从输出中总结出1个数值时,它给了我一个不同于正确答案的总数。修改后的代码:testfunction <-function(x){ x_2_columns = data.frame(x [34],x [23]) counter = 0 x_2_columns [,1] < - as.numeric(x_2_columns [,1]))对于(i in 1:nrow(x_2_columns)){ 如果(!is.na(x_2_columns [i,1]> x_2_columns [i,1] 2])) {counter = counter + 1 } } return(counter) } – learningcompsci

+0

您能否提供一个示例数据集?以及你想输出什么? – Vandenman

+0

我的数据集是矩阵格式,由列中的数值组成。我想循环遍历矩阵中的2列,确定一个数值是否大于另一个,然后计算这个条件满足的次数。我的输出应该是一个单一的数字。 – learningcompsci