Arrays 融化数组并使数值成为字符
我有一个数组,我想基于dimnames来融化它。问题是维度名称是大数值,因此将其设置为字符会将其转换为错误的ID请参见示例:Arrays 融化数组并使数值成为字符,arrays,r,data.table,melt,Arrays,R,Data.table,Melt,我有一个数组,我想基于dimnames来融化它。问题是维度名称是大数值,因此将其设置为字符会将其转换为错误的ID请参见示例: test <- array(1:18, dim = c(3,3,2), dimnames = list(c(00901291282245454545454,329293929929292,2929992929922929), c("a", "b", "c"),
test <- array(1:18, dim = c(3,3,2), dimnames = list(c(00901291282245454545454,329293929929292,2929992929922929),
c("a", "b", "c"),
c("d", "e")))
library(reshape2)
library(data.table)
test2 <- data.table(melt(test))
test2[, Var1 := as.character(Var1)]
> test2
Var1 Var2 Var3 value
1: 9.01291282245455e+20 a d 1
2: 329293929929292 a d 2
3: 2929992929922929 a d 3
4: 9.01291282245455e+20 b d 4
5: 329293929929292 b d 5
6: 2929992929922929 b d 6
7: 9.01291282245455e+20 c d 7
8: 329293929929292 c d 8
9: 2929992929922929 c d 9
10: 9.01291282245455e+20 a e 10
11: 329293929929292 a e 11
12: 2929992929922929 a e 12
13: 9.01291282245455e+20 b e 13
14: 329293929929292 b e 14
15: 2929992929922929 b e 15
16: 9.01291282245455e+20 c e 16
17: 329293929929292 c e 17
18: 2929992929922929 c e 18
test您需要将dimnames定义为字符
,然后缓慢修改melt.array
,当您对数组
执行melt
操作时会调用该数组:
test <- array(1:18, dim = c(3,3,2), dimnames = list(c("00901291282245454545454", "329293929929292", "2929992929922929"),
c("a", "b", "c"),
c("d", "e")))
在您的示例中尝试新函数(使用conv=FALSE
):
编辑
在reformae2
(devtools::install_github(“hadley/reformate”)
的开发版本中,melt.array
的定义不同,您可以按原样使用参数以避免转换:
melt(test, as.is=TRUE)
将为您提供与上述相同的结果(使用Var1
etc而不是X1
etc)。选项(scipen=99)将解决e+20问题如果是数字列,则开始处的0将被删除。我认为我们无法避免它。如果您是从csv文件等导入数据,则将此列本身指定为字符列以避免此问题
head(melt.array2(test, conv=FALSE))
# X1 X2 X3 value
# 1 00901291282245454545454 a d 1
# 2 329293929929292 a d 2
# 3 2929992929922929 a d 3
# 4 00901291282245454545454 b d 4
# 5 329293929929292 b d 5
# 6 2929992929922929 b d 6
melt(test, as.is=TRUE)