可以使用没有聚合功能的dcast吗?

前端之家收集整理的这篇文章主要介绍了可以使用没有聚合功能的dcast吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

猜你在找的设计模式相关文章