Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么data.table不能从表生成data.table,而data.frame却可以?_R_Dataframe_Data.table - Fatal编程技术网

为什么data.table不能从表生成data.table,而data.frame却可以?

为什么data.table不能从表生成data.table,而data.frame却可以?,r,dataframe,data.table,R,Dataframe,Data.table,我有以下数据和代码: mydf grp categ condition value 1 A X P 2 2 B X P 5 3 A Y P 9 4 B Y P 6 5 A X Q 4 6 B X Q 5 7 A Y Q 8 8 B

我有以下数据和代码:

mydf
  grp categ condition value
1   A     X         P     2
2   B     X         P     5
3   A     Y         P     9
4   B     Y         P     6
5   A     X         Q     4
6   B     X         Q     5
7   A     Y         Q     8
8   B     Y         Q     2
> 
> 
mydf = structure(list(grp = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L), .Label = c("A", "B"), class = "factor"), categ = structure(c(1L, 
1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("X", "Y"), class = "factor"), 
    condition = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("P", 
    "Q"), class = "factor"), value = c(2, 5, 9, 6, 4, 5, 8, 2
    )), .Names = c("grp", "categ", "condition", "value"), out.attrs = structure(list(
    dim = structure(c(2L, 2L, 2L), .Names = c("grp", "categ", 
    "condition")), dimnames = structure(list(grp = c("grp=A", 
    "grp=B"), categ = c("categ=X", "categ=Y"), condition = c("condition=P", 
    "condition=Q")), .Names = c("grp", "categ", "condition"))), .Names = c("dim", 
"dimnames")), row.names = c(NA, -8L), class = "data.frame")
但是,以下内容适用于data.frame,但不适用于data.table:

> data.frame(with(mydf, table(grp, categ, condition)))
  grp categ condition Freq
1   A     X         P    1
2   B     X         P    1
3   A     Y         P    1
4   B     Y         P    1
5   A     X         Q    1
6   B     X         Q    1
7   A     Y         Q    1
8   B     Y         Q    1
> 
> data.table(with(mydf, table(grp, categ, condition)))
   V1
1:  1
2:  1
3:  1
4:  1
5:  1
6:  1
7:  1
8:  1
> 
我是在这里犯了一些错误,还是需要更正data.table命令来获取其他变量?这里不太可能有bug。使用2个变量,它可以正常工作:

> data.table(with(mydf, table(grp, categ)))
   categ grp N
1:     A   X 2
2:     B   X 2
3:     A   Y 2
4:     B   Y 2
> 
> 
> data.frame(with(mydf, table(grp, categ)))
  grp categ Freq
1   A     X    2
2   B     X    2
3   A     Y    2
4   B     Y    2

感谢您的帮助。

修复了data.table v1.9.5中的问题。关闭。

它看起来像是
as.data.table(带有(mydf,table(grp,categ,condition))
工作,尽管我不确定为什么仅仅
data.table不工作。我猜对于
data.table
中不存在的
data.table
中的
frame
有一些使用
data.frame
的方法,因为在第一个示例中,与第二个示例相比,它是一个
array
。您还可以执行类似于
Res
data.table
的操作,仅对矩阵或data.frame输入调用
as.data.table
data.frame
调用
as.data.frame
也用于其他输入。您应该在github上提交错误报告-存在
as.data.table.table
data.table
不委托给它;fwiw我几乎总是使用
as.data.table
在类型之间进行转换,这通常更快