2017-02-12 26 views
0

동일한 구조 (예 : 열 A, B, C)의 디렉토리에 여러 xlsx 파일이 있습니다. 모든 파일은 하루의 데이터입니다. R의 모든 데이터를 가져 와서 하루와 다음 날짜의 차이점을 찾아야합니다.여러 xlsx 파일 가져 오기 R

files <- list.files(pattern = ".xlsx") 
for (i in seq_along(files)) { 
    assign(paste("Day", i, sep = "."), read.xlsx(files[i])) 
} 

가져온 데이터를 사용하는 방법을 알 수 없습니다. 예를 들어 는

Day.1 <- data.frame(Day.1) 
Day.1$A <- as.character(Day.1$A) 
Day.2 <- data.frame(Day.2) 
Day.2$A <- as.character(Day.2$A) 
anti_join (Day.1, Day.2) 

이 코드는 잘 작동하지만, 어떻게 변수로해야 하는가?

Day.[i] <- data.frame(Day.[i]) 
Day.[i]$A <- as.character(Day.[i]$A) 
Day.[i+1] <- data.frame(Day.[i+1]) 
Day.[i+1]$A <- as.character(Day.[i+1]$A) 
anti_join (Day.[i], Day.[i+1]) 

나는 하나의 데이터 프레임에있는 모든 파일을 가져올 시도했지만 나는 새 데이터

file.list <- list.files(pattern='*.xlsx') 
days.list <- lapply(file.list, read_excel) 
days <- rbindlist(days.list, idcol = "id") 
days <- data.frame(days) 
days$B <- as.character(days$B) 

를 사용하는 방법에 대한 유사한 문제가 그러나 나는 모른다 방법 같은 수행 카운터 변수를 사용하여

day1 <- filter(days, id==1) 
day2 <- filter(days, id==2) 
diff1 <- anti_join (day1, day2, by=c("B", "C")) 

을 (내가)

,
day(i) <- filter(days, id==(i)) 
day(i+1) <- filter(days, id==(i+1)) 
diff1 <- anti_join (day1, day2, by=c("B", "C")) 
+0

올바르게 이것을 수행하기 위해 (예를 들어, R을 파이썬처럼'for' 루프로 처리하는) 수많은 예제가 있습니다. 벡터화 된 함수를 사용하여 큰 데이터 프레임을 만든 다음 일 사이에 쉽게 그룹화하고 비교하는 방법에 대해 조금 더 연구해야합니다. – hrbrmstr

+0

'라이브러리 (dplyr)'는 어떨까요? 여기에 몇가지 방법으로 모든'라이브러리'줄을 넣으십시오. R은 – Parfait

+0

라이브러리 (data.table)와 라이브러리 (openxlsx) – Kalel

답변

1

은 () 및 ( + 1)은 각각 좌측과 우측의 dplyr::anti_join의 dataframe리스트 사이 (mapply 래퍼)베이스 R Map의 사용을 고려한다. 물론 마지막 날에는 전날 비교가되지 않습니다.

library(xlsx) 
library(dplyr) 

file.list <- list.files(pattern='*.xlsx') 
df.list <- lapply(file.list, function(f){ 
    read.xlsx(f, 1, stringsAsFactors = FALSE) 
}) 

left_days <- df.list[1:length(df.list)-1] # SUBSET OUT LAST DAY 
right_days <- df.list[2:length(df.list)]  # SUBSET OUT FIRST DAY 

# WITHOUT ARGS 
anti_join_list <- Map(anti_join, left_days, right_days) 

# WITH ARGS 
anti_join_list <- Map(function(x,y) anti_join(x, y, by=c("B", "C")), left_days, right_days)