【发布时间】:2017-03-28 00:49:27
【问题描述】:
我有一个数组,我想根据 dimnames 融化它。问题是维度名称是大数值,因此将它们设为字符会将它们转换为错误的 ID,请参见示例:
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
如何使用大 ID 字符制作第一列?我目前正在做的是将一个字符字母粘贴到dimnames然后融化,使其成为一个字符然后取一个子字符串,这真的是低效的。重要的是它是一个有效的解决方案,因为数据集是数百万行。有两个问题,一是ID前面的0被删除,转换成e+20字符。
【问题讨论】:
-
options(scipen=99) 将解决 e+20 问题
-
如果是数字列,开头的 0 将被撕掉。我不认为我们可以避免它。如果您是从 csv 文件等导入数据,则将该列指定为一个字符本身以避免此问题
标签: arrays r data.table melt