是否可以直接读取CSV列作为分类数据?


10

我需要使用R分析来自CSV格式的医学调查(带有100多个编码列)的数据。我将使用拨浪鼓进行一些初步分析,但在后台它仍然是R。

如果我读取.csv()文件,则将带有数字代码的列视为数字数据。我知道我可以使用factor()从它们创建分类列,但是要对100多个列执行此操作很麻烦。

我希望有一种更好的方法告诉R直接将列作为因素导入。或至少在以后将它们转换到位。

谢谢!


3
我们很高兴在这里提出R问题。参见meta.stats.stackexchange.com/questions/252/…–
罗伯·海德曼

Answers:


15

您可以使用colClasses参数指定数据列的类。例如:

data <- read.csv('foo.csv', colClasses=c('numeric', 'factor', 'factor'))

将数字分配给第一列,将因数分配给第二和第三列。由于您有很多列,因此快捷方式可能是:

data <- read.csv('foo.csv', colClasses=c('numeric', rep('factor', 37), 'character'))

或某些类似的变体(例如,将数字分配给第一列,将因数分配给接下来的37列,然后将字符分配给最后一个列)。


如果要通过变量名称指定类(例如,仅将类分配给一个变量),这可能也很有用:stackoverflow.com/a/8185739/1169233
Waldir Leoncio 2013年

3

或者只是在您读取数据后执行

dat <- read.csv("kdfjdkf")
apply(dat, 2, factor)

尽管这种类型的Q可能更适合Stack Overflow

编辑:请参阅下文。


1
请参阅meta.stats.stackexchange.com/questions/252/…目前的共识是这是一个适当的问题,如果您不同意meta上的chime in,请不要折磨新问题。
russellpierce 2010年

1
好的,但是您可能会有更大的受众群体来获得针对纯R问题的答案(至少现在是这样)-因此,“大概”。“折磨”是一个很强的词吗?:)
apeescape 2010年

1
当然,折磨有些强烈。对此我感到抱歉。我对重复犯规用户(您不是其中一个)感到沮丧,他们坚持将提问者重定向到StackOverflow而未对meta做出任何评论(共识似乎很清楚)。
russellpierce 2010年

如果您的列具有0填充数字,数字和缺失值的混合,或者仅具有'T'和的值'F'(将转换为逻辑值),则可能导致问题。
Max Candocia '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.