3

是否可以更改 ddply 的输出?我想知道是否可以在 ONE 行上呈现子集的唯一结果,而不是给每个结果一个新行。例如

ID   Season  Year
5074 Summer 2008
5074 Summer 2009
5074 Winter 2008
5074 Winter 2009
5074 Winter 2010

进入...

ID   Season  Year  
5074 Summer  2008,2009  
5074 Winter  2008,2009,2010  

我经常使用 ddply 手动诊断 for 循环等的结果,并且呈现这样的结果会减少输出的长度并使检查速度更快。

干杯!

4

3 回答 3

7

首先加载数据

dd = read.table(textConnection("ID   Season  Year
5074 Summer 2008
5074 Summer 2009
5074 Winter 2008
5074 Winter 2009
5074 Winter 2010"), header=TRUE)

然后ddply照常使用,由IDand分割Season

ddply(dd, .(ID, Season), summarise, Year=paste(Year, collapse=","))

我们使用collapse参数 inpaste来返回单个字符。由于您想将此用作检查,因此可能值得使用sorton Year,即

paste(sort(Year), collapse=",")
于 2012-09-19T13:04:20.617 回答
3
dat <- read.table(text="ID Season Year
 5074 Summer 2008
 5074 Summer 2009
 5074 Winter 2008
 5074 Winter 2009
 5074 Winter 2010", header = TRUE)

可以使用以下方式转换输出aggregate

aggregate(Year ~ ID + Season, data = dat, paste)
#    ID Season             Year
#1 5074 Summer       2008, 2009
#2 5074 Winter 2008, 2009, 2010
于 2012-09-19T13:03:13.770 回答
2

这非常适合1.8.2 版中新的漂亮列表打印data.table

library(data.table)
DT <- as.data.table(dd)
DT[,list(Year = list(Year)), by = list(ID, Season)]
##     ID Season           Year
## 1: 5074 Summer      2008,2009
## 2: 5074 Winter 2008,2009,2010

这种格式的结果的好处是它只是打印受到影响,您仍然可以访问结果而无需任何字符串拆分

DT[(ID==5074)&(Season == 'Summer'), Year]
## [1] 2008 2009
DT[(ID==5074)&(Season == 'Winter'), Year]
## [1] 2008 2009 2010
于 2012-09-20T00:07:43.493 回答