作者andrew43 (讨厌有好心推文後删文者)
看板R_Language
标题Re: [问题] 在变数中找出factor
时间Fri Nov 30 14:07:33 2018
※ 引述《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://webptt.com/cn.aspx?n=bbs/R_Language/M.1543558056.A.C93.html
※ 编辑: andrew43 (60.248.222.1), 11/30/2018 14:20:44
1F:推 AmigoSafin: 谢谢A大~学到很多 感谢您!! 12/01 06:34