我从存储在我们组的工作文件夹中的机器输出了一些数据,这些文件很复杂。为了开始工作,我开始做很多excel复制和粘贴和滚动。
我需要在R中编写一个可重现的脚本来清理和导出数据。如果将机器软件上的设置设置为导出所有变量,我会得到一个csv数据集,每个部分的行数可变,如下所示......
Machine Test Database Output,,,,,,
,,,,,,
Created: 15:49:13 PM on Thursday February 15 1998,,,,,,
Objects Selected For Output:,,,,,,
1,1101(FIELD)->Red(TYPE)->AD(FILE),,,,,
2,240(FIELD)->Generic(TYPE)->AE0118(FILE),,,,,
3,248(FIELD)->Generic(TYPE)->AE0118(FILE),,,,,
,,,,,,
Pos,Num,Type,Month,Day,Year,Diam(in)
,,,,,,
1,1,26,10,20,2015,2.613159
1,2,26,10,20,2015,2.541779
1,3,26,10,20,2015,2.758759
,,,,,,
Mean Values:,,,,,,
Pos,Num,Type,Month,Day,Year,Diam(in)
1,5,26,10,20,2015,2.509277
2,5,1,8,30,2012,2.839154
3,15,1,6.666667,23,2012.333374,2.381047
,,,,,,
Standard Deviations:,,,,,,
Pos,Num,Type,Month,Day,Year,Diam(in)
1,5,0,0,0,0,0.174324
2,5,0,0,0,0,0.260001
到目前为止我所做的是使用来自R中fread
包的data.table
来获取主数据的顶部(附带问题...最终我需要制作一个脚本来转将元数据转换为密钥并替换Pos
数字,添加字段类型和文件)
#skipping metadata
data1 <- fread("Data/digidata.csv",skip=" Pos")
但是我仍然在主数据的开头和sd和平均数据之间有可变的行数。我需要帮助的是从主数据中删除/导出均值和标准差数据。它们每个都由一个空行隔开。我已经看到了使用!
删除空白行的方法,但我不想删除空行,我需要将四个部分中的每一部分分为4个数据帧。有什么想法吗?
答案 0 :(得分:0)
鉴于AdamO的建议和一个very similar question被发现并得到了很好的答案。这是根据@sinQueso给出的问题的答案改编的。
将已读入的输出拆分为数据帧rawdata
# add column to indicate groups
rawdata$tbl_id <- cumsum(!nzchar(rawdata$Machine.Database.Output))
## remove blank lines
rawdata <- rawdata[nzchar(rawdata$Machine.Test.Database.Output), ]
## split the data frame
dt_s <- split(rawdata[, -ncol(rawdata)], rawdata$tbl_id)
## use first line as header and reset row numbers
dt_s <- lapply(dt_s, function(x) {
colnames(x) <- x[1, ]
x <- x[-1, ]
rownames(x) <- NULL
x
})
##to send all list parts out to their own dataframe
list2env(x=dt_s, envir = .GlobalEnv)