需要将来自同一Excel工作表的两个表集成到一个R数据集中

时间:2016-08-05 15:04:31

标签: r

我正在处理自动excel导出,其中包含有关在实际数据之前导出的数据的信息,以便它可以读取(在Excel中易于复制粘贴,尽管我主要使用的是csv衍生物)

> Site ID:  Site ID uninitialized                                        
>                    Serial Number: ####    
> TMI Serial Number:    ####-#-#####     
> SW Version:   Comm. 003.003.001 2015-05-27 15:51:17 buildmgr
>OrganType: [some text]
>OrganID:   [random string]                                          
>                    Session Date: 2015-10-21   Session Time: 08:45:18                  
> Date      Time        Var1    Var2    Var3    Var4    Var5
>                       Time    L/min   L/min   L/min   mmHg
> 10/21/2015    8:47:26 --- --- --- --- 0
> 10/21/2015    8:49:26 --- --- --- --- 0
> 10/21/2015    9:33:26 --- --- --- --- 0
> 10/21/2015    9:35:26 --- --- --- --- 0
> 10/21/2015    9:37:26 --- --- --- --- 0
> 10/21/2015    9:39:26 --- 1.46    0.97    1.53    13

虚线表示缺少数据。我不能为我的生活弄清楚如何让R了解正在发生的事情。理想情况下,我希望将标题数据集成到数据表中作为变量,以便以后可以合并多个这些文件以用于主列表。我是否需要在excel中手动修改它,或者我可以使用一些R语法?

2 个答案:

答案 0 :(得分:0)

如果使用包XLConnect读取Excel文件,则可以指定开始和结束的行以读取工作表。然后,您可以将第一个data.frame作为标题,将第二个数据设为" real" data.frame。之后,您将在data.frame中创建新列,以合并您从标题中获得的数据。

如果布局发生变化,您可能需要采用不同的方法。我希望这有帮助。

答案 1 :(得分:0)

一个想法是使用正则表达式来解析标头,如果标头是一致的。假设您的数据位于名为this.addSeries({ name: title, colorByPoint: true, data: pieSeries, type: 'pie' }, true) 的文件中:

testdata.csv

如何解析标题的示例:

writeLines(text="Site ID:  Site ID uninitialized                                        
                    Serial Number: ####    
 TMI Serial Number:    ####-#-#####     
 SW Version:   Comm. 003.003.001 2015-05-27 15:51:17 buildmgr
OrganType: [some text]
OrganID:   [random string]                                          
                    Session Date: 2015-10-21   Session Time: 08:45:18                  
 Date      Time        Var1    Var2    Var3    Var4    Var5
                       Time    L/min   L/min   L/min   mmHg
 10/21/2015    8:47:26 --- --- --- --- 0
 10/21/2015    8:49:26 --- --- --- --- 0
 10/21/2015    9:33:26 --- --- --- --- 0
 10/21/2015    9:35:26 --- --- --- --- 0
 10/21/2015    9:37:26 --- --- --- --- 0
 10/21/2015    9:39:26 --- 1.46    0.97    1.53    13",
    con="testdata.csv")

输出:

library(stringr)
header <- readLines("testdata.csv", n=7)
headers <- lapply(header[1:6], str_match, "(^.*?):(.*)")
date <- c(field="Date", 
    value=str_match(header[7], "[0-9]{4}-[0-9]{2}-[0-9]{2}"))
time <- c(field="Time", 
    value=str_match(header[7], "[0-9]{2}:[0-9]{2}:[0-9]{2}"))
d <- do.call(rbind, 
    lapply(headers, function(x) c(str_trim(x[2]), str_trim(x[3]))))
d <- rbind(d, date, time)
d <- data.frame(d, row.names=seq_len(nrow(d)))

然后,您可以将此数据加入/合并到数据表中。