r - 带有 dcast data.table 的宽格式

标签 r data.table dcast

关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

5年前关闭。




Improve this question




我想转换这样的表 (*):

set.seed(1)
mydata <- data.frame(ID=rep(1:4, each=3), R=rep(1:3, times=4), FIXED=rep(runif(4), each=3), AAA=rnorm(12), BBB=rbinom(12,12,0.5), CCC=runif(12))

ID R    FIXED    AAA  BBB   CCC
 1 1    0.26   -0.83   8   0.82
 1 2    0.26    1.59   5   0.64
 1 3    0.26    0.32   6   0.78
 2 1    0.37   -0.82   6   0.55
 2 2    0.37    0.48   6   0.52
 2 3    0.37    0.73   4   0.78
 3 1    0.57    0.57   8   0.02
 3 2    0.57   -0.30   7   0.47
 3 3    0.57    1.51   7   0.73
 4 1    0.90    0.38   4   0.69
 4 2    0.90   -0.62   7   0.47
 4 3    0.90   -2.21   6   0.86    

变成宽格式,像这样:
ID  FIXED   AAA1    BBB2    CCC2    FIXED2  AAA2    BBB2    CCC2    FIXED3  AAA3    BBB3    CCC3
1   0.27    0.49       7    0.73     0.37   0.74       4    0.69      0.57  0.58       7    0.48
2   0.91    -0.31      6    0.86     0.20   1.51       8    0.44      0.90  0.39       7    0.24
3   0.94    -0.62      7    0.07     0.66  -2.21       6    0.10      0.63  1.12       6    0.32
4   0.06    -0.04      7    0.52     0.21  -0.02       3    0.66      0.18  0.94       6    0.41

我该怎么做?
我试过
dcast(mydata, ID + FIXED ~ R, value.var=(names(mydata)[3:5])   

甚至写列名,“AAA”,“BBB”,“CCC”,但它产生一个错误,我不能得到我需要的宽格式。我也尝试过其他选择,但没有运气。

我该怎么做?

(*) 实际上有更多的专栏,但故事是一样的。

错误是:
Error in .subset2(x, i, exact = exact) : 
  recursive indexing failed at level 2
In addition: Warning message:
In if (!(value.var %in% names(data))) { :
  the condition has length > 1 and only the first element will be used

最佳答案

您引用了错误的值变量( AAABBBCCC 列的索引号为 4 - 6),您应该使用 setDT()将数据帧转换为数据表。使用:

dcast(setDT(mydata), ID + FIXED ~ R, value.var = names(mydata)[4:6])

这使:
   ID     FIXED      AAA_1      AAA_2      AAA_3 BBB_1 BBB_2 BBB_3     CCC_1     CCC_2     CCC_3
1:  1 0.2655087 -0.8356286  1.5952808  0.3295078     8     5     6 0.8209463 0.6470602 0.7829328
2:  2 0.3721239 -0.8204684  0.4874291  0.7383247     6     6     4 0.5530363 0.5297196 0.7893562
3:  3 0.5728534  0.5757814 -0.3053884  1.5117812     8     7     7 0.0233312 0.4772301 0.7323137
4:  4 0.9082078  0.3898432 -0.6212406 -2.2146999     4     7     6 0.6927316 0.4776196 0.8612095

如果不转换为数据表,data.table包将回退到 dcast 的执行来自 reshape2无法处理多个 value.var 's,因此是错误消息。

如果你想要另一个分隔符,你可以添加例如 sep = '.' dcast 的参数.

关于r - 带有 dcast data.table 的宽格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37622935/

相关文章:

R插入符号在训练后重命名data.table中的列

r - 具有 integer64 数字的 dcast 的意外行为

r - 为什么我会得到 "unused argument (na.action = NULL)"聚合错误?

R 中带有 pROC 的 ROC 对象返回错误(无有效数据)

r - 何时以及为什么 "print"需要两次尝试打印 "data.table"?

r - 使用循环顺序更新 data.table 列

r - 在包开发中处理数据集依赖的正确方法?

r - 什么是R的父框架

r - 有效地组合几个 dcast data.table(共享相同的 key )