2016-03-13 40 views
0

我正在嘗試創建一個性別分佈函數。有沒有辦法將一封信定義爲as.factor以外的其他信息?我想運行func(F)而不是func("F")。或者我應該去數字:func(0),func(1)func(2)數字與因素和IF語句

我也完成了與其他設計的操作,當留空白,但沒有。如果我削減函數不包括一個IF語句空白變量工作正常:

genderDist <- function(){ 
    cat("Female:", sum(voterData$GENDER == "F")) 
} 

在此先感謝!乾杯!

聲明全文:

genderDist <- function(x){ 

    if (x == "F"){ 
    cat("Female:", sum(voterData$GENDER == "F")) 
    } 

    else if (x == "M"){ 
    cat("Male:", sum(voterData$GENDER == "M")) 
    } 

    else if(x == "U"){ 
    cat("Unknown:", sum(voterData$GENDER == "")) 
    } 

    else{ 
    cat("Female:", sum(voterData$GENDER == "F")) 
    cat("Male:", sum(voterData$GENDER == "M")) 
    cat("Unknown:", sum(voterData$GENDER == "")) 
    } 

期望的結果: genderDist(F)給出的女性 genderDist(M)計給出的男性 genderDist(U)計給出未知 genderDist()的數量給計數上述所有

+0

你知道'table'函數嗎?試試'table(voterData $ GENDER)'。 – nicola

+0

@nicola是的,但功能不是我的問題,而是IF語句。功能正常工作。 – Geppelt

+0

對我不太瞭解。你的函數似乎計算了向量中值的出現,這是'表'的作用,所以我沒有看到重新發明輪子的理由。什麼不適合你?請分享你想要完成的事例。你如何使用你的功能?你是否收到錯誤或者你沒有得到你想要的結果? – nicola

回答

0

有幾種可能的編碼性別,除了因素:
1.爲字符,不作爲的因素。你仍然必須打電話給你的功能,如func("F")
2.您已經想到自己使用數字。缺點是可能不清楚1是男性還是女性。
3.最好的選擇恕我直言,將去二進制。將您的列命名爲「男性」,並使用TRUEFALSENA表示未知。這個二進制文件在你的if語句中也很好用。從if(is.na(male)) ... ; else if(male)開始。

編輯
但要實現你想要的結果,性別的編碼不是問題,我會採取這種做法:

#First, define variables Fe, Ma and Un 
#WARNING: Do NOT USE 'F', as 'F' is an abbr. for 'FALSE'!! 

Fe <- "F" 
Ma <- "M" 
Un <- "U" 
#now define a lookup dataframe for convienience 
LT <- data.frame(code = c(Fe,Ma,Un), name = c("Female","Male","Unknown"), stringsAsFactors = FALSE) 

# then define your function without an ifelse needed  
genderDist <- function(x){ 
    cat(LT[LT$code == x,"name"], sum(voterData$GENDER == x)) 
    } 

介紹一些假的數據:

voterData <- data.frame(GENDER= c("F","F","F","M","M","U")) 

然後運行功能:

> genderDist(Fe) 
Female 3 
> genderDist(Ma) 
Male 2 
> genderDist(Un) 
Unknown 1 
+0

謝謝,但選項2和3不關心空變量。 – Geppelt

+0

@Geppelt我爲你的問題增加了另一種方法,我認爲這樣更好。讓我知道它是否有效? – RHA

+0

謝謝!很棒! – Geppelt