我知道这个问题已在几个地方提出,我一直在试图找出一个可能的好几个小时的解决方案,但失败了。这就是我问这个的原因。data.table :: fread的stringsAsFactors = TRUE参数不会将字符列转换为因子类型 - 解决方法是什么?
所以,我有一个庞大的数据文件(〜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>
有遗漏的数据(它是空白)。在原始数据中,有很多列,因此我需要找到一种方法来创建列因子,只要列包含字符串。任何人都可以建议什么是最好的做法来完成这件事?我正在考虑将其更改为数据框并执行此操作。但它可以做到这一点,而它是一个data.table?
从我的理解,data.table默认情况下不存储任何东西作为一个因素,以减少存储量。你必须自己改变一切因素。我有一行代码为我做了这个:'df [,(names(df)):= lapply(.SD,as.factor),。SDcols = names(df)]'。编辑:如果你只想要字符列,使用这个:'types < - data.frame(sapply(df,class)); char_list < - row.names(types)[types [[1]] =='character']'然后用'char_list'替换'names(df)' – Michal
@Michal但因素需要更少的内存来储存 – rawr
您是否试过在'fread'的'colClasses'参数中指定''factor''必要的地方? – MichaelChirico