R 将长格式转换为宽格式

R 将长格式转换为宽格式,r,function,reshape,reshape2,R,Function,Reshape,Reshape2,我的数据框如下所示: x <- data.frame(c("a","a","a","a","b","b","c","c","c","a", "a"), c(1,2,3,4,1,2,1,2,3, 1, 2)) names(x) <- c("id","nr") id nr 1 a 1 2 a 2 3 a 3 4 a 4 5 b 1 6 b

我的数据框如下所示:

 x <- data.frame(c("a","a","a","a","b","b","c","c","c","a", "a"), c(1,2,3,4,1,2,1,2,3, 1, 2))
names(x) <- c("id","nr") 

      id      nr
   1   a       1
   2   a       2
   3   a       3
   4   a       4
   5   b       1
   6   b       2
   7   c       1
   8   c       2
   9   c       3
   10  a       1
   11  a       2
  id   1  2  3  4
   a   1  2  3  4
   a   1  2  NA NA
   b   1  2  NA NA
   c   1  2  3  NA
我已经使用了dcastx,id~nr,value.var=nr,但是我得到了警告:

缺少聚合函数:默认为长度

我知道这是由于非唯一行造成的。此外,我还创建了一些小组,这些小组给出了上述结果。但是,有没有一种不必创建组就可以创建它的方法

x <- data.frame(c("a","a","a","a","b","b","c","c","c","a", "a"), 
c(1,1,1,1,1,1,1,1,1,2,2), c(1,2,3,4,1,2,1,2,3, 1, 2))
names(x) <- c("id", "group","nr")

dcast(x, id + group ~ nr, value.var = "nr")

您可能需要一个分组变量。我们可以使用rleid,然后从data.table的devel版本尝试使用dcast,而不是像示例中所示手动创建它。i、 e.v1.9.5+。安装devel版本的说明如下

或者,正如@Arun在评论中提到的,我们可以直接在dcast本身中执行此操作


您可能需要一个分组变量。我们可以使用rleid,然后从data.table的devel版本尝试使用dcast,而不是像示例中所示手动创建它。i、 e.v1.9.5+。安装devel版本的说明如下

或者,正如@Arun在评论中提到的,我们可以直接在dcast本身中执行此操作


问题是什么?出现此警告是因为未指定参数fun.aggregate。哦,是的,我明白了-对于每个id值,OP都希望为NR值的唯一组合创建一个新行..相关:问题是什么?出现此警告是因为未指定参数fun.aggregate。哦,是的,我明白了-对于每个id值,OP都希望为NR值的唯一组合创建一行..相关:@Arun谢谢,这更紧凑,避免了创建/删除column@Arun谢谢,这样更紧凑,避免了创建/删除列
library(data.table)
dcast(setDT(x)[, gr:=rleid(id)], id+gr~nr, value.var='nr')[,gr:=NULL][]
#   id 1 2  3  4
#1:  a 1 2  3  4
#2:  a 1 2 NA NA
#3:  b 1 2 NA NA
#4:  c 1 2  3 NA
dcast(setDT(x), id + rleid(id) ~ nr, value.var = 'nr')[,id_1:= NULL]