시트 1, 시트 2, 시트 3의 Excel 파일이 있습니다. 각 시트에는 x 및 y 열이 있습니다. 는 제가 별도로 각 장을 읽고, '플롯 + 라인'했다 않았다 무엇 여러 Excel 시트를 반복적으로 하나의 그래프로 플롯합니다. read.xlsx
아래처럼 하나의 플롯으로 세 가지 플롯의 x-y를 넣고 싶다.
루프를 수행하는 방법이 있습니까? 3 장 이상 가지고있을테니까.
시트 1, 시트 2, 시트 3의 Excel 파일이 있습니다. 각 시트에는 x 및 y 열이 있습니다. 는 제가 별도로 각 장을 읽고, '플롯 + 라인'했다 않았다 무엇 여러 Excel 시트를 반복적으로 하나의 그래프로 플롯합니다. read.xlsx
아래처럼 하나의 플롯으로 세 가지 플롯의 x-y를 넣고 싶다.
루프를 수행하는 방법이 있습니까? 3 장 이상 가지고있을테니까.
좋은 방법은 각 시트를 데이터 프레임 목록으로 읽어서 소스 시트 식별자를 포함하는 단일 데이터 프레임에 쌓은 다음 ggplot2를 사용하여 플롯하는 것입니다.
다음은 내가 만든 test.xlsx
이라는 간단한 Excel 파일의 예입니다. 아래 그림과 같이 3 개의 시트에 4 개의 데이터 행이 있습니다. 코드는 Excel 파일이 현재 작업 디렉토리에 있다고 가정합니다. 그렇지 않은 경우 데이터를 읽을 때 파일에 적절한 경로를 제공하십시오. 나는 readxl
패키지를 사용하여 데이터를 읽었습니다. 이 방법은 동일한 열 이름을 가진 시트를 여러 개 포함하는 Excel 통합 문서로 일반화합니다 (다른 시트의 다른 열 이름을 처리하기 위해 추가 처리를 할 수는 있지만).
library(readxl)
library(dplyr)
library(ggplot2)
# Get sheet names
sht = excel_sheets("test.xlsx")
sht
[1] "Sheet 3" "Sheet 2" "Sheet1"
# Read each sheet into a list
df = lapply(setNames(sht, sht), function(s) read_excel("test.xlsx", sheet=s))
df
를 사용하는$`Sheet 3` x y 1 1 10 2 2 11 3 3 12 4 4 13 $`Sheet 2` x y 1 1 5 2 2 6 3 3 7 4 4 8 $Sheet1 x y 1 1 1 2 2 2 3 3 3 4 4 4
# Convert to a single data frame with a column for the source sheet
df = bind_rows(df, .id="Sheet")
# Plot
ggplot(df, aes(x,y,colour=Sheet)) +
geom_line() +
scale_y_continuous(limits=c(0,max(df$y))) +
theme_classic()
는 또 다른 방법이 될 수있다에는 통합 문서에있는 이름과 시트 수를 알려주는 getSheets
이라는 기능이 있습니다. 나는 시트의 이름을 읽고 모든 시트의 데이터 목록을 만들기 위해 시트의 이름을 사용하고 있습니다. 나중에 ggplot과 함께 사용하기 위해 이러한 데이터를 긴 형식으로 결합합니다. 예를 들어
library(xlsx)
setwd("/Users/pradeepkumar/Desktop/Misc") ###set your working directory where your data resides
sheetname <- getSheets(loadWorkbook("Workbook1.xlsx"))
s1 <- lapply(names(sheetname),function(x)read.xlsx("Workbook1.xlsx",sheetName = x))
names(s1) <- names(sheetname)
final_data <- data.frame(do.call("rbind",s1))
sheets <- rownames(final_data)
sheets <- gsub("\\.\\d{1,}","",sheets)
final_data$sheets <- sheets
rownames(final_data) <- NULL
library(ggplot2)
ggplot(data=final_data,aes(x=x,y=y,color=sheets)) + geom_line()
난 세 개의 시트 (1, 2, 3)
I 세 가지 X와 그들 각각의 데이터 세트와 변수와 Y가 함께 통합 (Workbook1.xlsx)를 갖는다. 위의 코드를 사용하여 아래 그림과 같은 플롯을 얻을 수 있습니다.
정말 고마워요! – futong
@futong 안녕하십니까. 당신이 거의 새로운 것 같지 않습니다. 당신이 솔루션을 게시 한 첫 번째 사람이었던 것처럼, 제 솔루션에 동의 응답을 실수로 다시 선택했을 수도 있습니다. 그러나 나는 당신이 eipi10 솔루션을 받아들이도록 요청합니다. 당신의 낮은 점수 때문에 내 대답에 업 보봇 (upvote)을 할 수는 없다는 것을 이해하지만, 감사는 나를 위해 충분하다. epi10으로 표시된 솔루션을 변경하십시오. 그것은 위대한 공동체입니다. 감사합니다. – PKumar
사실, @ 푸통이 먼저 일어난 대답이 아니라 그에게 가장 적합한 대답을 선택하는 것이 더 낫다고 생각합니다. 'xlsx'를 사용하여 자신의 워크 플로우에 더 잘 맞는다면, 그는 대답을 선택해야합니다. – eipi10
완벽! 많이 감사합니다! – futong