3

ddplyの出力を変更することは可能ですか?各結果に新しい行を与えるのではなく、1つの行のサブセットに固有の結果を表示できるかどうか疑問に思いました。例えば

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、通常どおりに使用しIDSeason

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

collapse引数を使用してpaste、単一の文字を返します。これをチェックとして使用したいので、で使用する価値があるかもしれませsortYear

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 に答える