这是一个文件模式
metastring: time1, a,b,c,d,f
144135 42435 345425 2342423
263766 35553 353453 3534553
355345 52454 525252 2423465
245466 45645 355345 6454556
355662 26397 353577 3558676
metastring: time2, a,c,d,f
224234 23423 324234 4242324
312323 13123 312312 1312321
246456 63564 646544 4456456
244424 53556 546456 4645645
元序串由时间戳组成,a,b,c,d是指数字串的名称(例如“a”指的是块的第一个数字串)。数字字符串是固定宽度但它们的数量不是常量,取决于元字符串。
我想要的是一个像这样结构化的data.frame:
time1 a 144135 42435 345425 2342423
time1 b 263766 35553 353453 3534553
time1 c 355345 52454 525252 2423465
time1 d 245466 45645 355345 6454556
time1 f 355662 26397 353577 3558676
time2 a 224234 23423 324234 4242324
time2 c 312323 13123 312312 1312321
time2 d 246456 63564 646544 4456456
time2 f 244424 53556 546456 4645645
或者能够通过匹配元串格式和读取两个元串之间的线来一次读取一个块。无法找到一种方法,因为gsubfn read.pattern似乎一次只能读取一行文件而且我得不到比metastring更多的东西。
答案 0 :(得分:2)
要获得数据帧,可以使用Sub onIndexChanged(sender As Object, e As EventArgs)
Dim b As ComboBox = CType(sender, System.Windows.Forms.ComboBox)
If b.Equals(b1) Then
If b1.SelectedIndex = -1 Then
b2.Enabled = False
b3.Enabled = False
Else
b2.Enabled = True
b3.Enabled = False
b2.Items.Clear()
b3.Items.Clear()
b2.Items.AddRange(b1.Items.Cast(Of String)() _
.Where(Function(x) x <> b1.SelectedItem.ToString()).ToArray())
End If
Else if b.Equals(b2) Then
If b2.SelectedIndex <> -1 Then
b3.Items.Clear()
b3.Items.AddRange(b2.Items.Cast(Of String)(). _
Where(Function(x) x <> b2.SelectedItem.ToString()).ToArray())
b3.Enabled = True
b3.SelectedIndex = 0
End If
End If
End Sub
,然后对字符串进行一些后处理。在您的代码中,将readLines()
替换为您的文件名。
textConnection(text)
数据:强>
## read the file
dat <- readLines(textConnection(text))
## find the 'metastring' lines
meta <- grepl("metastring", dat, fixed = TRUE)
## split the 'metastring' lines for the first two columns
## then create the first two columns
f2cols <- do.call(
"rbind",
lapply(
strsplit(dat[meta], "(.*: )|, ?"),
function(x) cbind(text1 = x[2], text2 = tail(x, -2))
)
)
## create the final data frame
cbind(f2cols, read.table(text = dat[!meta]))
# text1 text2 V1 V2 V3 V4
# 1 time1 a 144135 42435 345425 2342423
# 2 time1 b 263766 35553 353453 3534553
# 3 time1 c 355345 52454 525252 2423465
# 4 time1 d 245466 45645 355345 6454556
# 5 time1 f 355662 26397 353577 3558676
# 6 time2 a 224234 23423 324234 4242324
# 7 time2 c 312323 13123 312312 1312321
# 8 time2 d 246456 63564 646544 4456456
# 9 time2 f 244424 53556 546456 4645645