Possible Duplicate:
07000
来自reshape2的dcast没有公式,没有重复。拿这些示例数据:
df <- structure(list(id = c("A","B","C","A","C"),cat = c("SS","SS","SV","SV"),val = c(220L,222L,223L,224L,225L,2206L)),.Names = c("id","cat","val"),class = "data.frame",row.names = c(NA,-6L))
我想dcast这些数据,只是将值列表,而不对value.var应用任何函数,包括默认长度。
在这种情况下,它工作正常。
> dcast(df,id~cat,value.var="val") id SS SV 1 A 220 224 2 B 222 225 3 C 223 2206
但是当有重复的变量时,乐趣默认为长度。有办法避免吗?
df2 <- structure(list(id = c("A",220L,1L)),-7L)) > dcast(df2,value.var="val") Aggregation function missing: defaulting to length id SS SV 1 A 1 1 2 B 1 1 3 C 1 2
理想情况下,我正在寻找的是添加一个fun = NA,因为不要尝试聚合value.var。 df2中我想要的结果df2:
id SS SV 1 A 220 224 2 B 222 225 3 C 223 220 4. C NA 1
我不认为有办法直接做,但我们可以添加一个额外的列,这将有助于我们
df2 <- structure(list(id = c("A",-7L)) library(reshape2) library(plyr) # Add a variable for how many times the id*cat combination has occured tmp <- ddply(df2,.(id,cat),transform,newid = paste(id,seq_along(cat))) # Aggregate using this newid and toss in the id so we don't lose it out <- dcast(tmp,id + newid ~ cat,value.var = "val") # Remove newid if we want out <- out[,-which(colnames(out) == "newid")] > out # id SS SV #1 A 220 224 #2 B 222 225 #3 C 223 220 #4 C NA 1