2015-11-26 6 views
0

Когда я создаю столбец строк, используя data.table, используя строки параметров data.frameAsFactor = F, результирующая таблица данных правильно использует параметры strAsAsFactor = F, но затем добавляет дополнительный столбец «strAsAsFactor». Достаточно легко избавиться от дополнительной колонки. Но есть ли способ сообщить data.frame не добавлять столбцы на основе параметра data.frame? I.e., это ошибка или особенность? См ToyExample ниже:data.table с параметром data.frame создает дополнительный столбец

library(data.table) 
factorTest <- sample(c('O','A', 'B','AB'), 50, replace = T) 
summary(factorTest) 
    Length  Class  Mode 
     50 character character 
summary(as.factor(factorTest)) 
A AB B O 
10 18 7 15 
test1 <- data.frame(dabo = factor(factorTest, 
    levels = c('O','A','B','AB')), dabostr = factorTest, 
    stringsAsFactors = F) 
test2 <- data.table(dabo = factor(factorTest, 
    levels = c('O','A','B','AB')), dabostr = factorTest, 
    stringsAsFactors = F) 
summary(test1) 
dabo  dabostr   
O :15 Length:50   
A :10 Class :character 
B : 7 Mode :character 
AB:18      
summary(test2) 
dabo  dabostr   stringsAsFactors 
O :15 Length:50   Mode :logical 
A :10 Class :character FALSE:50   
B : 7 Mode :character NA's :0   
AB:18      
+2

'data.table' просто не имеют' stringsAsFactors' argument- см '? Data.table'. Таким образом, вы просто создаете новый столбец. Причина, по которой строки не преобразуются в такие факторы, как 'data.frame', состоит в том, что это поведение по умолчанию' data.table'. –

+0

Я заполнил запрос функции для обработки этого предупреждения или предупреждения: [data.table # 1446] (https://github.com/Rdatatable/data.table/issues/1446) – jangorecki

ответ

1

Это было зафиксировано в commit 3dbc493 и теперь data.table() имеет полнофункциональную stringAsFactors аргумент.
Когда TRUE будет использовать быструю внутреннюю as.factor функция, так как база factor() работает медленно.
Ниже вашего кода воспроизводится на последних данных. Таблица 1.9.7.

library(data.table) 
factorTest <- sample(c('O','A', 'B','AB'), 50, replace = T) 
test1 <- data.frame(dabo = factor(factorTest, 
    levels = c('O','A','B','AB')), dabostr = factorTest, 
    stringsAsFactors = F) 
test2 <- data.table(dabo = factor(factorTest, 
    levels = c('O','A','B','AB')), dabostr = factorTest, 
    stringsAsFactors = F) 
summary(test1) 
# dabo  dabostr   
# O : 8 Length:50   
# A :10 Class :character 
# B :16 Mode :character 
# AB:16         
summary(test2) 
# dabo  dabostr   
# O : 8 Length:50   
# A :10 Class :character 
# B :16 Mode :character 
# AB:16   
Смежные вопросы