删除完全空行下面的数据

问题描述 投票:0回答:1

我从存储在我们组的工作文件夹中的机器输出了一些复杂的数据。为了开始工作,我开始做很多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个数据帧。有任何想法吗?

r subset
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.