Re: [问题] 在变量中找出factor

楼主: andrew43 (讨厌有好心推文后删文者)   2018-11-30 14:07:33
※ 引述《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的数列的方便写法。
: 是什么意思呢?
: 谢谢大家~~
作者: AmigoSafin   2018-12-01 06:34:00
谢谢A大~学到很多 感谢您!!

Links booklink

Contact Us: admin [ a t ] ucptt.com