Циклы по нескольким переменным во фрейме данных суммируют и преобразовывают данные из длинных в широкие, а затем записывают результаты в виде файла .csv. - PullRequest
0 голосов
/ 11 декабря 2018

У меня очень большой набор данных, я хотел бы обобщить его (извлечь средства) для каждого человека в каждой среде для каждой переменной.Затем преобразуйте данные из длинного в широкоформатный формат, используя в качестве моей временной переменной Environments, затем запишите длинные данные для каждой переменной в виде файла .csv.Вот то, что я сделал, которые отлично работают вне цикла.

varlist <- names(pheno)[7:17]

for ( i in varlist)
{
pheno_W<-aggregate(pheno[[i]]~ENV+ENTRY., data=pheno, mean,  na.rm=TRUE)

pheno_L<-reshape(as.data.frame(pheno_W), idvar = c("ENTRY."), timevar = "ENV", direction = "wide")

filename <- paste(i, ".csv", sep="")

write.csv(pheno_L,filename)

}

Любые предложения будут высоко оценены

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вот мой ответ, он выглядит не очень эффективно, но, по крайней мере, работает:

for ( i in varlist)

{

pheno_W<-aggregate(pheno[[i]]~ENV+ENTRY., data=pheno, mean,  na.rm=TRUE)

colnames(pheno_W)[3]<-noquote(i)

pheno_L<-reshape(as.data.frame(pheno_W), idvar = c("ENTRY."), timevar = "ENV",   direction = "wide")
#m<- paste(i, "avg", sep="")
pheno_L$avg<- rowMeans(pheno_L[,2:8], na.rm = TRUE)
filename <- paste(i, ".csv", sep="")

write.csv(pheno_L,filename)

}               
0 голосов
/ 11 декабря 2018

как вы написали, i - это не переменная, а символ (вставьте is.character(i) в начале вашего цикла, чтобы увидеть это).

Чтобы сообщить R, что i следует читать как переменную, вы можете использовать

i=as.symbol(i)   
pheno_W<-eval(bquote(aggregate( .(i)~ENV+ENTRY., data=pheno, mean,  na.rm=TRUE)))

Проверить этот связанный вопрос , по-разному сказать Rрассматривать символ как переменную в формуле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...