2013-10-26 68 views
0

一個看似簡單的R任務讓我難以置信......我在這裏看到了一個N​​umberField字段和一個DataFrame中的TrueFalse字段。在for()循環中使用if()語句

#Make Data 
TrueFalse <- rep(c("TRUE","TRUE", "FALSE"),10) 
Number <- seq(1, length(TrueFalse),3) 
Table <- as.data.frame(cbind(TrueFalse, Number)) 

看看head()

head(Table) 

我試圖創建一個包含從數列中的值,如果TrueFalse域爲TRUE新列。 在元代碼:

對於每一行,新野==號碼,如果TrueFalse = true,否則沒有什麼(即保留爲NA)。

我的工作代碼如下。雖然搜索有成效,但我仍然缺少幾個步驟。預先感謝任何幫助!

#for() loop using if() 
NewField <- rep("NA", nrow(Table)) 
for (i in 1:nrow(NewField)){ 
    if(Table$TrueFalse[i] == "TRUE") 
     {NewField[i] <- Table$Number[i]} 
    } 

回答

2

首先,在轉換爲數據框之前,您不希望cbind列。 cbind將強制結果爲任何數據類型與所有列兼容,因此在這種情況下,它會將您的Number變量轉換爲字符。可能不是你想要的,如果不是現在,那麼最終。

其次,R有一個邏輯數據類型,所以你應該使用它。特別是如果你有值「真」和「假」。

因此:

TrueFalse <- rep(c(TRUE, TRUE, FALSE),10) 
Table <- data.frame(TrueFalse, Number) 

Table$NewField <- ifelse(Table$TrueFalse, Table$Number, -1) 
2

你可以在一行中做到這一點。例如:

Table$NewField <- ifelse(Table$TrueFalse=="TRUE",Table$Number,-1) 

另外,如果你使用過TRUEFALSE,而不是「真」和「假」,你就不需要要麼使用相等測試。