2016-09-14 3 views
1

Я думаю, что это очень новичок, но поиск в Интернете (и SO) не заставил меня понять ответ, несмотря на то, что вы пытаетесь найти немало решений. Вот проблема:Доступ к данным после разбивки на списки

У меня есть CSV набор данных со многими столбцами, например: yearID XY Z. Я прочитал это в использовании: data<-read.csv("/foo/bar.csv") Оттуда я использую XY и Z, чтобы вычислить для каждой строки: data$A<-(X+Y)/Z

Теперь я хочу построить средний А в каждом году, поэтому я делаю: list_df <- split(data, data$yearID). Ура, я вижу, что если я делаю резюме (list_df [[5]]), я вижу резюме X Y Z и A на пятый год.

Вот где я застрял, я затем попытаться сделать что-то вроде:

for(year in list_df){ 
xy<-data.frame(mean(year$yearID, na.rm=T), mean(year$A, na.rm=T)) 
} 

Этот цикл «работает» (он не выдаст ошибку), но то, что выходит в ху только в прошлом году и в среднем за этот год. В идеале, я хочу в конечном итоге заговорить «Avg A vs YearID». Я пробовал несколько перестановок в цикле for, основанный на других примерах кода, которые я нашел, но ни один из них не дал мне рабочего решения. Предложения наиболее Добро пожаловать в любую часть этого процесса, как я только начал изучать Р.

Cheers, Zach

+0

Вы можете сделать это напрямую, используя 'aggregate'; Вот пример: «plot (aggregate (hp ~ cyl, mtcars, mean), col =« blue », pch = 19, cex = 2.5)' – ddunn801

+0

Если вы могли бы включить воспроизводимый пример вашего набора данных в свой пост, это будет скорее всего, получите больше и лучших ответов. –

ответ

1

Если вам нужен список отщепляется по другим причинам, вы можете использовать aggregate:

data <- data.frame(yearId=rep(2010:2014,each=2),X=runif(10,1,100),Y=runif(10,50,150),Z=runif(10,100,200)) 
data$A <- (data$X+data$Y)/data$Z 

data2 <- aggregate(A~yearId,data,mean) 
plot(data2$yearId,data2$A) 
+0

Hi @ ddunn801. Большое спасибо, агрегат должен делать то, что я хочу. В качестве второстепенного вопроса вы могли бы объяснить, что делает первая строка? Я не понимаю дополнения rep или runif к методу data.frame. Я мог бы скопировать вставку этой команды и посмотреть, работает ли она, но я также хотел бы понять эту методологию. – Zach

+0

Вам это не нужно для вашего собственного проекта. Поскольку вы не предоставили нам образец набора данных, я просто построил быстрый «на лету» с тем же самым макетом, который вы описали. Все, что он делает, заполняет ячейки случайными числами. Вы можете игнорировать это. – ddunn801

Смежные вопросы