2017-11-28 3 views
-3

루프에서 다음을 자동화하는 방법이 있습니까?루프에서 변수 이름 바꾸기 R

hour_1 <- aggregate(hour_1$freq, by=list(country=hour_1$country), FUN=sum) 

hour_2 <- aggregate(hour_2$freq, by=list(country=hour_2$country), FUN=sum) 

hour_3 <- aggregate(hour_3$freq, by=list(country=hour_3$country), FUN=sum) 


hour_4 <- aggregate(hour_4$freq, by=list(country=hour_4$country), FUN=sum) 

hour_5 <- aggregate(hour_5$freq, by=list(country=hour_5$country), FUN=sum) 

hour_6 <- aggregate(hour_6$freq, by=list(country=hour_6$country), FUN=sum) 

hour_7 <- aggregate(hour_7$freq, by=list(country=hour_7$country), FUN=sum) 

hour_8 <- aggregate(hour_8$freq, by=list(country=hour_8$country), FUN=sum) 

hour_9 <- aggregate(hour_9$freq, by=list(country=hour_9$country), FUN=sum) 

hour_10 <- aggregate(hour_10$freq, by=list(country=hour_10$country), 
FUN=sum) 

자동으로 시간이 걸리는 for 루프와 같은 smth를 원합니다.

들으 :)

+0

일부 재현 가능한 코드를 제공하고 수행하고자하는 것을 더 잘 설명하십시오. –

+0

'get()'함수 사용을 고려할 것입니다. for 루프는'c ('hour_1', 'hour_2', ..., 'hour_n')'객체의 벡터를 반복 할 수 있고'tmp <- get ('hour_1')'과' tmp $ freq, tmp $ country' 등 원하는 것을 얻을 수 있습니다. – Nate

+0

먼저'hour_1 : n'을 하나의 큰 데이터 세트에 필요한 열로 둡니다. 'rbind (hour_1, hour_2, hour_n)'을 선택하고 'hour'에 대한 열을 추가하십시오. 그러면 큰 집합에서'aggregate (freq ~ country + hour, hours, sum) '를 한 번 수행 할 수 있습니다. 별도의 데이터 집합을 유지하고'get()'등을 사용하는 것은 일어나기를 기다리는 악몽이다. – thelatemail

답변

2

네,하지만 가장 좋은 방법은 나열하고 lapply 또는 sapply 기능을 대신 루프를 사용하는 것입니다.

hour.in <- mget(paste0('hour_', 1:10)) 
hour.out <- lapply(hour.in, function(x) aggregate(x$freq, 
    by=list(country=x$country), FUN=sum)) 
names(hour.out) <- paste0('hour_', 1:10) 

이제 모든 결과 hour.out에 개별적으로 접속하거나 또는 상기 lapplysapply을 사용하여 처리 될 수있다.

+0

나는'mget()'에 대해 몰랐다. 이것은 매우 유용합니다! – Nate

+0

이것을 조금 확장하면, 하나의 데이터 세트에 모두 넣을 수 있습니다. 'hour.in <- Map (cbind, hour.in, hour = seq_along (hour.in)); 시간 <- do.call (rbind, L); 집계 (freq ~ 국가 +시,시, 총) ' – thelatemail

+0

답장을 보내 주셔서 감사합니다. 귀하의 코드를 시도하고 알려 드리겠습니다. – nader