2014-12-15 2 views
3

dplyr의 data.frame 반환 함수를 사용하여 쉽게 구성하려는 위치의 Excel 파일에서 데이터를 읽으 려합니다. 여기에 간단한 get_table() 함수와 두 개의 생성 된 data.frames를 사용하여 문제를 제시합니다. 실제로 get_table() 함수는 서버에서 데이터를 가져 와서 파싱합니다.dplyr 시퀀스에서 data.frame 반환 함수 사용

dplyr에서 함수를 호출 할 때 모든 data.frame 결과를 결합해야합니다.

list <- as.vector(files[,2]) 
t <- lapply(list, get_table) 
do.call("rbind", t) 

을 그리고로 결과를 결합 :

files <- read.table(header=T, text=' 
    type  filename 
    A   A_table 
    B   B_table 
') 

A_table <- read.table(header=T, text=' 
    area  observations 
    K1  5 
    K2  9 
') 

B_table <- read.table(header=T, text=' 
    area  observations 
    K1  23 
    K2  28 
    K3  1 
') 

get_table <- function(name) { 
    return(get(name)) 
} 

내가 lapply로 파일을 읽을 수 있습니다 :

area observations 
1 K1   5 
2 K2   9 
3 K1   23 
4 K2   28 
5 K3   1 

나는 그러나 할 리어 할 것입니다 여기에 간단한 코드입니다 이와 비슷한 일을하는 dplyr 스타일에서도 마찬가지입니다 (그러나 작동하지 않습니다 - 이것은 그렇지 않습니다) :

files %>% 
    select(filename) %>% 
    rowwise() %>% 
     get_table() 
+1

당신은 다만 수'MGET (as.character (파일 $ 파일 이름)) 당신이 t %> % rbind_all' – akrun

+1

는'filename'는 요인이다 ()'dplyr 사용을 주장하는 경우 –

+1

첫 번째 문자로 변환하면 쉽게 될 수 있도록' – Khashaa

답변

2

@ 리차드 스캔으로 언급했듯이 filename은 문자 여야합니다. 코드의 마지막 줄에 do 적용

files <- read.table(header=T, stringsAsFactors=FALSE, text=' 
    type  filename 
    A   A_table 
    B   B_table 
') 

lapply(files[ ,2], get) %>% rbind_all과 같은 결과를 얻을 수있다.

files %>% 
    rowwise() %>% 
    do(get_table(.$filename)) 

#Groups: <by row> 

# area observations 
#1 K1   5 
#2 K2   9 
#3 K1   23 
#4 K2   28 
#5 K3   1 
+0

요인의 자동 craetion는 R에있는 가장 큰 gotchas의 하나로 확인되었다. 그것은이 문제에있는 역할을했다 http://stackoverflow.com/a/1535373/1792999 – pe3