ループを実行して行列を埋めようとしています。ここではサンプルデータがある:私が何をしようとしています何ループ内の行ごとに行列を埋めてください
#generate sample data
reg<-rep(c("a","b","c","d"),each=3)
year<-rep(c(2005:2008),each=3)
sea<-rep(c("Winter","Summer","Autumn"),4)
set.seed(1)
area<-runif(12)
prod<-runif(12)
yld<-runif(12)
dat<-data.frame(reg,year,sea,area,prod,yld)
dat$reg<-as.character(dat$reg)
dat$sea<-as.character(dat$sea)
str(dat)
#create an empty matrix to store my results
results.mat <- matrix(0, ncol = 6, nrow = NROW(unique(dat$reg)))
#create a loop
for (j in unique(sort(dat$reg))){
reg<-dat[dat$reg==j,]
for (k in unique(sort(reg$year))){
year<-reg[reg$year==k,]
results.mat<-year[year$area==max(year$area),]
}}
results.mat
は、各reg
のために、各year
のためですが、私はarea
が最大である行を抽出したいです。これはa
を意味し、area
の3つの値のうち最大値がarea
であるため、Autumn
の行を選択する必要があります。同様に、b
の場合は、が最大であるため、Winter
の行を選択する必要があります。同様に、d
の場合、Summer
の行を選択する必要があります。area
が最大であるからです。
したがって、最後の行列(またはデータフレーム)は、a
,b
,c
,d
の1つの行を持つ必要があります。しかし、上記のループを実行すると、d
の行だけが表示され、他の3つの行は表示されません。私はこれが最後の行の行と関係があると思います。それは、行列results.mat
を満たしていて、前の選択を上書きします。しかし、マトリックスについてはわかりませんが、どのように行を行で埋めるべきですか?
おかげ
行列とdata.framesが異なっています。 data.frameの行を選択したい場合、結果は/でなければなりません(以下の答えのように)。 – Frank
ベースの1つのオプションR: 'dat [as.logical(ave(dat $ reg、dat $ year、FUN = function(x)x == max(x)、drop = TRUE))、 – nicola