2017-03-27 41 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