首页 > 解决方案 > R data.table:melt() 自动转换为大写字母

问题描述

为什么 melt() 将维度名称从小写字母转换为大写字母?怎么能避免呢?请参见下面的示例。谢谢!

library(data.table)

# an array which dimnames are mixed numeric and characters (e.g. "inf")
ax <- array(round(rnorm(12)), dim = c(3,4), dimnames = list(y = c(0,1,"inf"), x = letters[4:7]))

# melt converts "inf" to "Inf"
dt <- setDT(melt(ax))
> head(dt)
    y x value
1   0 d     0
2   1 d    -1
3 Inf d     1
4   0 e     0
5   1 e     2
6 Inf e    -1

标签: rdata.table

解决方案


阅读?melt.array显示此选项:

as.is

如果FALSE,默认情况下,dimnames 将使用type.convert. [参见?type.convert.] 如果TRUE,它们将作为字符串保留。

melt(ax, as.is = TRUE)

     y x value
1    0 d     1
2    1 d     1
3  inf d     0
4    0 e     0
5    1 e     2
6  inf e     0
7    0 f     0
8    1 f    -1
9  inf f     0
10   0 g     1
11   1 g    -1
12 inf g    -1

因此,此行为来自type.convert(c("0", "1", "inf"))基本包 utils。来自?type.convert

包含可选空格的其他向量,后跟其他十进制或十六进制常量(请参阅?NumericConstants),或NaNInfinfinity(忽略大小写)或值 fromna.strings被转换为数字。


推荐阅读