如何从文件中提取数字数据并在R中创建数据帧
下面是我的文件的一个示例模板,我想在其中提取数字数据并创建一个数据框架(文件名:mylog.log) 文件内容如何从文件中提取数字数据并在R中创建数据帧,r,R,下面是我的文件的一个示例模板,我想在其中提取数字数据并创建一个数据框架(文件名:mylog.log) 文件内容 ***************************************************************** ****** option summary ****** runlvl = 3 bypass = 2 Opening plot unit= 15 file=new_run.pa0 ******
*****************************************************************
****** option summary
******
runlvl = 3 bypass = 2
Opening plot unit= 15
file=new_run.pa0
******
******** dc transfer curves tnom= 25.000 temp= 25.000 *****
x
volt current
v0
1.0000e-01 -2.570e-11
2.0000e-01 -2.769e-11
3.0000e-01 -2.795e-11
4.0000e-01 -2.803e-11
5.0000e-01 -2.814e-11
6.0000e-01 -2.823e-11
7.0000e-01 -2.833e-11
8.0000e-01 -2.842e-11
9.0000e-01 -2.861e-11
1.0000e+00 -2.871e-11
1.1000e+00 -2.880e-11
1.2000e+00 -2.889e-11
1.3000e+00 -2.899e-11
1.4000e+00 -2.908e-11
1.5000e+00 -2.916e-11
1.6000e+00 -2.925e-11
1.7000e+00 -2.934e-11
1.8000e+00 -2.942e-11
1.9000e+00 -2.950e-11
2.0000e+00 -2.958e-11
2.1000e+00 -2.966e-11
2.2000e+00 -2.973e-11
2.3000e+00 -2.980e-11
2.4000e+00 -2.986e-11
2.5000e+00 -3.022e-11
2.6000e+00 -3.030e-11
2.7000e+00 -3.039e-11
2.8000e+00 -3.046e-11
2.9000e+00 -3.053e-11
3.0000e+00 -3.059e-11
3.1000e+00 -3.066e-11
3.2000e+00 -3.110e-11
3.3000e+00 -3.119e-11
3.4000e+00 -3.125e-11
3.5000e+00 -3.132e-11
3.6000e+00 -3.140e-11
3.7000e+00 -3.145e-11
3.8000e+00 -3.152e-11
3.9000e+00 -3.161e-11
4.0000e+00 -3.167e-11
4.1000e+00 -3.175e-11
4.2000e+00 -3.175e-11
4.3000e+00 -3.182e-11
4.4000e+00 -3.189e-11
4.5000e+00 -3.197e-11
4.6000e+00 -3.199e-11
4.7000e+00 -3.202e-11
4.8000e+00 -3.212e-11
4.9000e+00 -3.219e-11
5.0000e+00 -3.278e-11
5.1000e+00 -3.281e-11
5.2000e+00 -3.297e-11
5.3000e+00 -3.295e-11
5.4000e+00 -3.301e-11
5.5000e+00 -3.299e-11
5.6000e+00 -3.310e-11
5.7000e+00 -3.381e-11
5.8000e+00 -3.384e-11
5.9000e+00 -3.396e-11
6.0000e+00 -3.398e-11
6.1000e+00 -3.405e-11
6.2000e+00 -3.411e-11
6.3000e+00 -3.413e-11
6.4000e+00 -3.424e-11
6.5000e+00 -3.420e-11
6.6000e+00 -3.432e-11
6.7000e+00 -3.438e-11
6.8000e+00 -3.444e-11
6.9000e+00 -3.450e-11
7.0000e+00 -3.444e-11
7.1000e+00 -3.455e-11
3.9300e+01 -8.790e+00
3.9400e+01 -8.824e+00
3.9500e+01 -8.859e+00
3.9600e+01 -8.894e+00
3.9700e+01 -8.928e+00
3.9800e+01 -8.963e+00
3.9900e+01 -8.998e+00
4.0000e+01 -9.033e+00
y
***** job concluded
****** HSPICE -- H-2013.03-SP2 32-BIT (Aug 26 2013) RHEL32 ******
******
****** job statistics summary tnom= 25.000 temp= 25.000 *****
****** Machine Information ******
我想提取v0行下面的值,并创建一个两列数据框
Volt Current
-100.00000m 406.5220f
"........................"
对于所有行,直到出现数字数据。事实上,线路电压和电流之前的线路数量是动态的,而数字数据传输之后的线路数量也是动态的。数值数据行也是动态的。可以考虑的一点是,数值数据总是在文件的下面两行之后开始
volt current
v0
下面是我通过指定数据行号尝试的代码
DATA <- readLines(myfile)
DataStartPos <- 314
DataEndPos <- 1062
#Seperate numeric data and META data and bind to data frame
tmp <- as.data.frame(DATA[DataStartPos:DataEndPos])
tmp <- separate(tmp, col = 1, c("S.No", "Volts", "Amps"), sep = "\\s+")
数据fread
来自数据。表
包将很好地工作。如果您只使用默认参数,它会给您一系列警告消息。如果您在指定要跳过的行数时非常小心,则可以减少警告消息的数量
#with a file
df <- fread(file ="path/to/target_file")
df
V1 v0
# 1: -100.00000m 406.5220f
# 2: -200.00000m 806.6048f
# 3: -300.00000m 1.2066p
# 4: -400.00000m 1.6067p
# 5: -500.00000m 2.0067p
# 6: -600.00000m 2.4066p
# 7: -700.00000m 2.8066p
# 8: -800.00000m 3.2067p
# 9: -900.00000m 3.6067p
#10: -1.00000 4.0067p
#11: -1.10000 4.4067p
#12: -1.20000 4.8068p
#13: -1.30000 5.2069p
#14: -1.40000 5.6068p
#15: -1.50000 6.0070p
#16: -1.60000 6.4069p
#17: -1.70000 6.8070p
#18: -1.80000 7.2069p
#19: -1.90000 7.6070p
#20: -2.00000 8.0069p
#21: -2.10000 8.4071p
#22: -2.20000 8.8070p
#23: -2.30000 9.2071p
#24: -2.40000 9.6070p**
# V1 v0
所以你可以
df <- fread(file ="path/to/target_file", skip = "volt", col.names = c("volt","current"))
sed
命令多种多样,但此结构将打印/1/、/2/-特别是模式x
和y
之间的行。^
表示该行的第一个字符应该是以下字符。
如果您知道x
和y
将是行中唯一的字符,则可以通过将命令设置为“sed-n'/^x$/,/^y$/p'
使其更具体。同样,我不知道这是否适用于windows,但它适用于我的终端。但要跳过的行数是动态的。我需要使用模式(“伏特电流”)和下一行(“v0”)来识别数值。我该怎么做?谢谢你的编辑。有没有办法提到终点线?数字行的数量也是动态的。数值数据总是在模式(“y”)之前结束。在您的示例中,我没有看到任何涉及“y”模式的内容,因此我不知道如何提供帮助fread
文档表示,默认情况下,它将读取遵循可预测定界的最大行数nrows
参数不是动态的,并且与skip
参数没有相同的功能。我在问题中编辑了模式(“y”)。我得到了这个错误,df
df <- fread(file ="path/to/target_file", skip = "volt", col.names = c("volt","current"))
file_path <- "path/to/target_file"
fread(cmd = paste("sed -n '/^x/,/^y/p'", file_path), col.names = c("volt","current")