r - 为什么 `pivot_wider` 在 `data.table` 上不起作用

标签 r data.table pivot-table tidyverse tidyr

长到宽枢轴的简单示例:

library(tidyverse)
library(data.table)

df <- data.frame(names=letters[1:3],values=1:3)
df %>% pivot_wider(names_from=names,values_from=values)
#works

dt <- data.table(names=letters[1:3],values=1:3)
dt %>% pivot_wider(names_from=names,values_from=values)
Error in data.frame(row = row_id, col = col_id) : 
  arguments imply differing number of rows: 0, 3
为什么会发生这个错误?
PS:一种解决方法是使用 as.data.frame(dt) 删除数据表性.
dt %>% as.data.frame %>% pivot_wider(names_from=names,values_from=values)
#works

最佳答案

tidyr 中手动输入此功能mentions only "data frame" without specifying other classes像 tibble 或 data.table。所以解决你的问题,功能
不是设计用于处理 data.table,或者 pivot_wider 中存在错误.
作为解决方法,您现在可以使用 as.data.frame (正如您已经提到的),如果您的数据很大,那么可能 setDF避免额外的内存复制。
您也可以使用 data.table功能 dcast执行相同类型的转换。

library(tidyr)
library(data.table)

df <- data.frame(names=letters[1:3],values=1:3)
pivot_wider(df, names_from=names,values_from=values)
## A tibble: 1 x 3
#      a     b     c
#  <int> <int> <int>
#1     1     2     3
setDT(df)
dcast(df, .~names, value.var="values")[, ".":=NULL][]
#   a b c
#1: 1 2 3

关于r - 为什么 `pivot_wider` 在 `data.table` 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65047707/

相关文章:

r - 按组总结应用涉及下一组的功能

sql - 数据透视表字符串在数据透视列下分组?

R 计算重复项的数量并将其存储到另一列

直接从 R 读取 .dat 和 .dct

r - 从 knitr 调用时 fread 的奇怪输出

r - Tidyverse 按行绑定(bind)未命名向量列表的方法 - do.call(rbind,x) 等效

excel - 获取数据透视表中组总数的百分比

VBA数据透视表过滤器根据单元格值进行更改

r - data.table 通过表达式快速访问列

r - 如何根据最终列值对矩阵中的列进行排序?