我有一个带有多个因子变量的大数据帧(100k Row x 50 Col)。我想要一个小的子集(如100行)来做一些原型设计。问题是当我输入:
train <- train[1:100,]
尺寸缩小(使用dim()
),但它似乎仍然存储原始数据框中的所有因素(我使用lsos()
找到here来衡量内存大小。
有没有办法解决这个问题?到目前为止,我发现的唯一方法是将因子变量转换为字符串然后再转换为子集,然后再次转换为因子。我觉得必须有更好的方法来做到这一点。
有什么建议吗?
答案 0 :(得分:4)
使用droplevels
函数删除新data.frame中没有的关卡,有关详细信息,请参阅?droplevels
。
示例:
> DF <- data.frame(num=1:15, letter=rep(letters[1:5], each=3),random=rnorm(15))
> levels(DF[, 2]) # all levels
[1] "a" "b" "c" "d" "e"
>
> DF2 <- DF[1:10, ] # subseting
> levels(DF2[, 2]) # all levels again
[1] "a" "b" "c" "d" "e"
> DF2[, 2] <- droplevels(DF2[, 2])
> levels(DF2[, 2]) # only the levels contained in DF2
[1] "a" "b" "c" "d"