是否可以改变ddply的输出?我想知道是否有可能在一行上呈现子集的唯一结果,而不是给每个结果一个新行。例如。
ID Season Year
5074 Summer 2008
5074 Summer 2009
5074 Winter 2008
5074 Winter 2009
5074 Winter 2010
INTO ...
ID Season Year
5074 Summer 2008,2009
5074 Winter 2008,2009,2010
我经常使用ddply来手动诊断for循环的结果等,并且像这样显示结果会减少输出的长度并使检查更快。
干杯!
答案 0 :(得分: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
,按ID
和Season
进行拆分
ddply(dd, .(ID, Season), summarise, Year=paste(Year, collapse=","))
我们使用collapse
中的paste
参数返回单个字符。由于您希望将其用作支票,因此在sort
上使用Year
可能值得,即
paste(sort(Year), collapse=",")
答案 1 :(得分: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
答案 2 :(得分:2)
这非常适合data.table
版本1.8.2中的列表的新漂亮打印
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