melt.data.table 中的畸形因子错误
Malformed Factor error in melt.data.table
在 data.table
或 reshape2
中使用 melt
后,我需要操作 variable
列的值,所以我需要它是 character
class。如果由于某些 畸形因素 错误而失败。
我不明白这是什么问题 -- 也许是错误?
这是我的一小部分数据:
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
我以前从未遇到过这种情况,而且我一直无法找到有关此错误的文档。
我不认为这真的是一个错误。 Dataframes 和扩展 data.tables 不应该有多个同名的列。如果列被命名为遵守该规则,则不会出现错误。我确实希望 data.table
-print 方法将字符值括在引号中,因为这些值(除了 qtr)都是字符值。
在 data.table
或 reshape2
中使用 melt
后,我需要操作 variable
列的值,所以我需要它是 character
class。如果由于某些 畸形因素 错误而失败。
我不明白这是什么问题 -- 也许是错误?
这是我的一小部分数据:
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
我以前从未遇到过这种情况,而且我一直无法找到有关此错误的文档。
我不认为这真的是一个错误。 Dataframes 和扩展 data.tables 不应该有多个同名的列。如果列被命名为遵守该规则,则不会出现错误。我确实希望 data.table
-print 方法将字符值括在引号中,因为这些值(除了 qtr)都是字符值。