看板 R_Language 關於我們 聯絡資訊
※ 引述《AmigoSafin ()》之銘言: : [問題類型]: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : : [軟體熟悉度]: : 入門(寫過其他程式,只是對語法不熟悉) : [問題敘述]: : 請簡略描述你所要做的事情,或是這個程式的目的 : 想請教大家 : 已知一個data frame內有1000個變數 : 寫code找出其中為factor的變數 : ( You may choose to create a data frame but it is not part of the : requirement) : 得到的解答是這樣: : sum(sapply(x,is.factor)) x如果是一個長度為k的list或有k欄的data.frame (其實data.frame就是一種list), 則sapply(x,is.factor)會回傳k個布林值, 分別指出每個單位是不是factor。 至於sum(一串布林值)就是有幾個True的意思。 在R中布林值加減是把True當成1而False當成0。 : getNFactors<-function(x) sum(sapply(x,is.factor)) : y<-data.frame(a=letters[1:2],b=1:2,d=c("A","Factor?"),e=2:3) : getNFactors(y) # 2 在使用data.frame()的時候, 有一個參數叫stringsAsFactors可以自動把字元型式的欄位變成factor。 通常stringsAsFactors的預設值是True, 因此,y$a和y$d此時是factor。 你可以藉由sapply(y, class)或是class(y$d)看出來。 : y$d<-as.character(y$d) : getNFactors(y) # 1 這裡是把y$d轉成字串,所以不再是factor了。 一樣,看看sapply(y, class)。 : 實話說實在看不太懂最後這一部分 : 請問是if getNFactors(y)=2則其中沒有Factors : if getNFactors(y)=1則為有 Factors 應該是寫成 if(getNFactors(y)==1),意思是y裡頭是不是正好有1個factor。 : 因為原程式碼用d=c("A", "Factors?")來測試 : 但b=1:2, e=2:3 R裡頭建立公差為1的數列的方便寫法。 : 是什麼意思呢? : 謝謝大家~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.222.1 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1543558056.A.C93.html ※ 編輯: andrew43 (60.248.222.1), 11/30/2018 14:20:44
AmigoSafin: 謝謝A大~學到很多 感謝您!! 12/01 06:34