2017-04-24 65 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

相关问题