Я пытаюсь запустить цикл и заполнить матрицу. Вот образец данные:заполнить матрицу по строке в цикле
#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
следует выбрать строку с Autumn
, так как area
является максимальным среди всех трех значений area
. Аналогично, для b
, строка с Winter
должна быть выбрана с area
является максимальной. Аналогично, для d
, строка с Summer
должна быть выбрана с area
является максимальной.
Поэтому окончательная матрица (или dataframe) должны иметь одну строку для a
, b
, c
, d
. Однако, когда я запускаю свой цикл выше, он дает мне только строку для d
, а не для остальных трех. Я думаю, что это связано с последней строкой цикла, где я указываю, что она заполняет матрицу results.mat
и перезаписывает предыдущий выбор. Но я не уверен в матрице, как я должен заполнять строки по строкам.
Благодаря
Матрицы и data.frames различны. Если вы хотите выбрать строки data.frame, результатом будет/должен быть также data.frame (как в ответе ниже). – Frank
Один параметр в базе R: 'dat [as.logical (ave (dat $ area, dat $ reg, dat $ year, FUN = function (x) x == max (x), drop = TRUE)),]' – nicola