2017-04-24 50 views

回答

2

我認爲這裏的一個好方法是將每張表單讀入一個數據框列表,將它們堆疊到一個包含源表單標識符的數據框中,然後使用ggplot2進行繪圖。

下面是我創建的一個名爲test.xlsx的簡單Excel文件的示例。它有三張表,每張表有四行數據,如下所示。該代碼假定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() 

enter image description here

+0

完美!非常感謝! – futong

2

另一種方法可以是使用它具有稱爲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)

我在它們中的每三個不同的數據集,其中x和y爲變量的工作簿(Workbook1.xlsx)。使用上面的代碼,我可以得到如下圖。

enter image description here

+1

非常感謝! – futong

+0

@futong嗨歡迎來到SO,看起來你們並不新鮮,你可能錯誤地重新選擇了接受的答案,但是我要求你接受eipi10解決方案,因爲他是第一個發佈解決方案的人,我明白,由於你的低分,你不能滿足我的答案,但是對我來說,感謝已經足夠了。請將標記爲epi10的解決方案更改。這是一個偉大的社區。謝謝 – PKumar

+2

事實上,我認爲@futong選擇最適合他的答案會更好,而不是發生在第一位的答案。如果使用'xlsx'更適合他的工作流程,那麼他應該選擇你的答案。 – eipi10

相關問題