2016-12-12 1 views
2

После использования melt в любом data.table или reshape2 мне нужно манипулировать ценности variable столбца, так что мне нужно, чтобы это было character класса. Это если сбой из-за некоторого искаженный коэффициент ошибка.искаженной ошибки фактора в melt.data.table

Я не понимаю, в чем проблема - возможно, ошибка?

Вот небольшая часть моих данных:

dput(eg.dat) 

structure(list(qtr = structure(c(2004.75, 2005, 2005.25, 2005.5, 
2005.75, 2006, 2006.25, 2006.5, 2006.75, 2007, 2007.25), class = "yearqtr"), 
ACAIND1INR = c("99.5", "101.2333333333333", "105.4666666666667", 
"108.9333333333333", "113.3", "124.8666666666667", "149.7333333333333", 
"167.5333333333333", "170.5", "175.7", "189.6666666666667" 
), ACAIND1INR = c("99.5", "101.4", "105.4", "108.9", "113", 
"125.7", "149.5", "167.4", "170.5", "176.3", "189.4"), ACAIND2INR = c("99.2", 
"101.2", "105.1", "108.5333333333333", "113.1", "125.3333333333333", 
"150.5", "170.0666666666667", "171.4666666666667", "173.7333333333333", 
"184.4333333333333"), ACAIND2INR = c("99.2", "101.6", "105.1", 
"108.4", "112.9", "125.5", "149.4", "169.8", "171.5", "174.2", 
"184.3")), .Names = c("qtr", "ACAIND1INR", "ACAIND1INR", 
"ACAIND2INR", "ACAIND2INR"), class = c("data.table", "data.frame" 
), row.names = c(NA, -11L), .internal.selfref = <pointer: 0x0000000000120788>) 


     qtr  ACAIND1INR ACAIND1INR  ACAIND2INR ACAIND2INR 
1: 2004.75    99.5  99.5    99.2  99.2 
2: 2005.00 101.2333333333333  101.4    101.2  101.6 
3: 2005.25 105.4666666666667  105.4    105.1  105.1 
4: 2005.50 108.9333333333333  108.9 108.5333333333333  108.4 
5: 2005.75    113.3  113    113.1  112.9 
6: 2006.00 124.8666666666667  125.7 125.3333333333333  125.5 
7: 2006.25 149.7333333333333  149.5    150.5  149.4 
8: 2006.50 167.5333333333333  167.4 170.0666666666667  169.8 
9: 2006.75    170.5  170.5 171.4666666666667  171.5 
10: 2007.00    175.7  176.3 173.7333333333333  174.2 
11: 2007.25 189.6666666666667  189.4 184.4333333333333  184.3 

Когда я бегу:

melt(eg.dat, id.vars = 'qtr', variable.factor = FALSE) 

Я получаю ошибку переменная фактор уродливы, но я не могу понять, что это означает или как его исправить:

Error in melt.data.table(eg.dat, id.vars = "qtr", variable.factor = FALSE) : 
    malformed factor 

Я никогда не сталкивался с t его раньше, и я не смог найти документацию об этой ошибке.

+0

Я предполагаю, что вам не нравится ваше повторение имен col ... hm, no it not it, так как «melt (data.table (id = 1, a = 1, a = 2), id = «id») 'работает. – Frank

+0

Он отлично работает с расплавом reshape2 'setDF (например, dat); melt (eg.dat, id.vars = 'qtr', variable.factor = FALSE) 'Поскольку это предназначено для воспроизведения поведения reshape2, я предполагаю, что это ошибка. Если вы считаете, что это подходит, вот инструкции для файла отчета об ошибке https://github.com/Rdatatable/data.table/wiki/Support – Frank

+1

Я не думаю, что это действительно ошибка. Кадры данных и расширения data.tables не должны иметь несколько столбцов с тем же именем. Нет ошибки, если столбцы имеют имена для того, чтобы содержать это правило. Я бы хотел, чтобы метод print.table.table включал символьные значения в кавычки, так как эти значения (за исключением qtr) являются всеми символьными значениями. –

ответ

3

Я не думаю, что это действительно ошибка. Кадры данных и расширения data.tables не должны иметь несколько столбцов с тем же именем. Нет ошибки, если столбцы имеют имя, чтобы следовать этому правилу. Я бы хотел, чтобы метод data.table -print включал символьные значения в кавычки, поскольку эти значения (за исключением qtr) являются всеми символьными значениями.

Смежные вопросы