我知道这table是不是首选的方式 ,使频率表作为data.table.但是假设我有一个table,无论出于何种原因,我想要转换为data.table.该data.table转换不相同的方式工作的data.frame转换呢:
library(data.table)
tab <- table(1:101)
DF.tab <- data.frame(tab)
DT.tab <- data.table(tab)
Run Code Online (Sandbox Code Playgroud)
data.frame将table数据转换为a data.frame,同时data.table尝试将原始table对象存储为列.(我已经用其他例子中的tab <- table(1:n)多个值来测试它n.)
> str(DF.tab)
'data.frame': 101 obs. of 2 variables:
$ Var1: Factor w/ 101 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Freq: int 1 1 1 1 1 1 1 1 1 1 ...
> str(DT.tab)
Classes ‘data.table’ and 'data.frame': 101 obs. of 1 variable:
$ tab: 'table' int [1:101(1d)] 1 1 1 1 1 1 1 1 1 1 ...
..- attr(*, "dimnames")=List of 1
.. ..$ : chr "1" "2" "3" "4" ...
- attr(*, ".internal.selfref")=<externalptr>
Run Code Online (Sandbox Code Playgroud)
还要注意,虽然as.data.frame工作方式相同data.frame,但as.data.table完全失败:
> as.data.table(tab)
Error in UseMethod("as.data.table") :
no applicable method for 'as.data.table' applied to an object of class "table"
Run Code Online (Sandbox Code Playgroud)
在一个看似非常密切相关的问题中,如果表格足够大(非正式测试表明.Dim > 100),我在尝试时会遇到非常奇怪的错误print:
> print(data.table(table(1:101)))
Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
dims [product 5] do not match the length of object [10]
Run Code Online (Sandbox Code Playgroud)
请注意,print(data.table(table(1:100)))没有错误,但只显示一列V1,而print(data.frame(table(1:100)))has Var1和Freq列.
有没有更好的解决方法data.table(data.frame(...))呢?我最好总是试图table完全避免吗?这是由此print直接导致的错误,还是更深层次的问题?
有一个as.data.frame.table函数被调用data.frame(tbl-object).它将类似矩阵的表对象转换为长格式数据对象.似乎没有as.data.table.table函数,并且可以说应该存在并且我同意它应该以与as.data.frame方法相同的方式运行,而不是从矩阵继承(这就是表格如何通常继承:
> data.table(matrix(1:10, 2))
V1 V2 V3 V4 V5
1: 1 3 5 7 9
2: 2 4 6 8 10
> data.table(as.table(matrix(1:10, 2)))
Error in UseMethod("as.data.table") :
no applicable method for 'as.data.table' applied to an object of class "table"
> data.table(as.data.frame(as.table(matrix(1:10, 2))))
Var1 Var2 Freq
1: A A 1
2: B A 2
3: A B 3
4: B B 4
5: A C 5
6: B C 6
7: A D 7
8: B D 8
9: A E 9
10: B E 10
Run Code Online (Sandbox Code Playgroud)
我认为这应该是一个功能请求,我不认为它与第二个问题有关.
你的第二个问题似乎是一个错误.该data.table作者最突出@MatthewDowle一般都相当敏感,你应该考虑提交一份报告.