为什么 data.table 不从 table 生成 data.table 而 data.frame 可以?
Why is data.table not making a data.table from a table although data.frame does?
我有以下数据和代码:
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 命令才能获取其他变量?这里不太可能有错误。使用 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
感谢您的帮助。
已在 commit #1760 of data.table v1.9.5. Closes #1043 中修复。
我有以下数据和代码:
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 命令才能获取其他变量?这里不太可能有错误。使用 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
感谢您的帮助。
已在 commit #1760 of data.table v1.9.5. Closes #1043 中修复。