表的data.table与表的data.frame非常不同
我知道表的data.table与表的data.frame非常不同,r,data.table,R,Data.table,我知道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) 还要注意的是,as.data.frame与data.frame的工作方式相同,as.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)
还要注意的是,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"
这似乎是一个非常密切相关的问题,如果表足够大(非正式测试建议.Dim>100
),我在尝试打印时会出现非常奇怪的错误:
> 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]
请注意,print(data.table(table(1:100))
没有错误,但只显示一列V1
,而print(data.frame(table(1:100))
有Var1
和Freq
列
是否有比data.table(data.frame(…)
更好的解决方法?我是否最好总是试图完全避免table
?并且print
错误是直接由此引起的,还是更深层次的原因?有一个as.data.frame.table
函数,它是通过data.frame(tbl对象)
调用的。它将类似矩阵的表对象转换为长格式数据对象。目前似乎还没有as.data.table.table函数,可以说应该有,我同意它应该以与as.data.frame方法相同的方式运行,而不是从矩阵继承(这是table通常继承的方式:
> 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
我认为这应该是一个功能要求,我不认为这与第二个问题有关
<>你的第二个问题看起来像是一个bug。<代码>数据>表>代码>作者最为显著的@ MatthewDowle通常是相当敏感的,你应该考虑提交一份报告。< /P>这似乎是一个漂亮的打印问题(如何<代码>数据>表>代码>当总行为100时打印前5行和下5行)…我认为问题在于R
将频率表作为一个数组,其中每个唯一变量都有自己的维度,并且该唯一变量存储为名称
。您应该提交一个功能请求和一个bug报告提交bug报告作为和功能请求作为。自2014年以来,有作为.data.table.table
方法可用,最有可能在2017年更新(v1.10.2),或将添加新的array
方法。如我所说。Matt是一名出色的维护人员,Arun是一名出色的贡献者。反应非常迅速,对将R分支变成不断发展和改进的资源非常感兴趣。我不知道这些MOD,也很高兴听到它们。我曾尝试在data.table j调用中使用table
,并且对表演感到失望。
> 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