我知道这个问题已经在多个地方提出,我已经尝试了数小时来寻找一个可能的好解决方案,但都失败了。这就是为什么我要问这个问题。
所以,我有一个巨大的数据文件(~5GB),我使用fread()
来读取它。
library(data.table)
df<- fread('output.txt', sep = "|", stringsAsFactors = TRUE)
head(df, 5)
age income homeowner_status_desc marital_status_cd gender
1: $35,000 - $49,999
2: 35 - 44 $35,000 - $49,999 Rent Single F
3: $35,000 - $49,999
4:
5: $50,000 - $74,999
str(df)
Classes ‘data.table’ and 'data.frame': 999 obs. of 5 variables:
$ age : chr "" "35 - 44" "" "" ...
$ income : chr "$35,000 - $49,999" "$35,000 - $49,999" "$35,000 - $49,999" "" ...
$ homeowner_status_desc: chr "" "Rent" "" "" ...
$ marital_status_cd : chr "" "Single" "" "" ...
$ gender : chr "" "F" "" "" ...
- attr(*, ".internal.selfref")=<externalptr>
数据存在缺失值(即空白处)。在原始数据中,有很多列,因此我需要找到一种方法,使得包含字符串的列能够变成因子。有没有人能建议一下最佳实践来完成这个任务?我考虑将其转换为数据框并执行此操作。但是,在它仍是数据表的情况下是否可能实现呢?
df[,(names(df)):=lapply(.SD, as.factor),.SDcols=names(df)]
。编辑:如果您只想要字符列,请使用以下代码:types <- data.frame(sapply(df, class)); char_list <- row.names(types)[types[[1]] == 'character']
,然后将names(df)
替换为char_list
。 - Michalfread
的colClasses
参数中必要的地方指定"factor"
了吗? - MichaelChiricostringsAsFactors=TRUE
不会导致因子列。此外,指定colClasses
为因子似乎也不起作用。 - Dean MacGregor