2013-01-03 6 views
2

이것이 중복되면 어디서나 찾을 수 없었습니다.여러 데이터 프레임에서 동일한 작업을 수행하는 가장 효율적인 방법은 무엇입니까?

데이터 프레임이 많으며 모든 열 이름을 소문자로 변환하고 싶다고 말합니다. 이 작업을 수행하는 가장 효율적인 방법은 무엇입니까? assignget은 간단하지만 더 빠른 방법이 있는지 궁금합니다. 난 그냥 ChickWeightmtcars, 비 동적 동작이 간단하게 될 것이다있어 경우

.. 여기에

names(ChickWeight) <- tolower(names(ChickWeight)) 
names(mtcars) <- tolower(names(mtcars)) 

.. 그리고 내가이 프로세스를 동적으로 만들 것입니다 방법,하지만이 있는지 궁금하다 보다 효율적인 솔루션?

# column headers contain uppercase 
head(ChickWeight) 

# start with a vector of data frame names.. 
# this might contain many, many data frames 
tl <- c('ChickWeight' , 'mtcars') 

# loop through each data frame name.. 
for (i in tl){ 
    # save it to a temporary object name 
    x <- get(i) 

    # main operations here.. 

    # perform the operation(s) you want to run on each data frame 
    names(x) <- tolower(names(x)) 

    # ..end of main operations 


    # assign the updated data frame to overwrite the original data frame 
    assign(i , x) 
} 

# no longer contains uppercase 
head(ChickWeight) 

답변

1

나는 접근 방식을 바꾸면 속도가 훨씬 빨라질 것이라고 생각하지 않습니다.

dlist <- lapply(dlist,function(x) setNames(x,tolower(names(x)))) 
:이 작업을 수행하는 더 관용적 방법은

dlist <- list(mtcars,ChickWeight) 

(또는)

namevec <- c("mtcars","ChickWeight") 
dlist <- lapply(namevec,get) 

다음 '같은 것을 목록에서 데이터 프레임을 모두 저장하고 사용하는 것

... 물론이 접근법을 사용하려면 데이터 프레임을 목록 요소로 참조해야하며 이는 차례로 분석의 전체 구조에 영향을 미칩니다. 그렇게하고 싶지 않다면 나는 get/assign 접근법보다 훨씬 좋은 것을 볼 수 없습니다. 다시 지구 환경에 목록의 값을 지정하려면

당신은 할 수 있습니다 :

invisible(mapply(assign,namevec,dlist,MoreArgs=list(envir=.GlobalEnv))) 

것은 나는이 제시하는 간단한 방법에 비해 반드시 빠른 이상의 투명 것을 강조하고 싶다 원래 게시물에.

+0

감사합니다. .. dlist의 개별 구성 요소를 자신의 개체로 다시 메모리에 가져 오는 가장 빠른 방법에 대한 조언은 무엇입니까? –

+0

감사합니다. ben :) 불행히도 'for' 루프보다 나은 것은 아닙니다. 쥐. –

+0

나는 이런 종류의 관리 작업의 속도가 중요하다는 것을 당신이 무엇을하고 있는지 궁금합니다. 환경 사이에서 복사하는 데 오랜 시간이 걸리는 정말로 큰 물체를 가지고 있다면 목록 사용에 대해 열심히 생각하고 싶을 것입니다 내가 제안했듯이 ... –

관련 문제