簡體   English   中英

R循環中的ifelse

[英]ifelse within loop in R

我嘗試使用ifelse通過循環將值分配給多個變量,但是它為所有情況和變量提供了NA。

我有一個職業歷史數據集(一個職業所有的職業),其中每個職業都被編碼為“ q08dXX”,XX代表從01到16的數字。每個職業都有一個起始年齡,存儲在變量“ q08paXX”中,其中XX代表從12到70的數字。我想創建變量job12到job70,代表給定年份所有調查受訪者的當前職位。 在使用變量job12到job70創建了一個新的數據框並為它們分配了NA之后,我想使用基於“ q08dXX”和“ q08paXX”的​​值的實際值填充它們。

我的代碼如下所示:

for (spell in c("01","02","03","04","05",
                "06","07","08","09","10","11","12",
                "13","14","15","16")
){ 
  for (age in 12:70){
      newdata[,paste("job",age, sep="")] <- ifelse(
      olddata[,paste("q08pa",spell,sep="")]==age &
        olddata[,paste("q08pa",spell,sep="")]!=NA, # check if new spell started and if starting time not missing
      olddata[,paste("q08d",spell,sep="")], # assign value of new spell if it started
      newdata[,paste("job",age, sep="")]) # keep existing value if new spell didn't start
  }
}

在這里,olddata是保存作業類型和作業開始年齡的數據框,而新數據是我要在其中創建jobXX變量的新數據框。 以某種方式,運行此代碼后,我得到一個充滿NA的數據幀。 這里有什么問題? 是ifelse嗎? 是否與作用域有關,並且是否無法正確訪問循環變量?

要測試NA ,您需要使用is.na函數。 看到:

> 1 != NA    # bad
[1] NA

> !is.na(1)  # good
[1] TRUE

所以最后,只需替換:

olddata[,paste("q08pa",spell,sep="")]!=NA

!is.na(olddata[,paste("q08pa",spell,sep="")])

你應該沒事的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM