Alm99Насколько я понял, в Вашей таблице нет специального разделителя полей: всё структурируется с помощью различного количества пробелов. Поэтому даже с перлом будет достаточно много возни. Если надо по-быстрому решить проблему и просто вычленить данные по категориям Мах F / RMS F / Мах D / RMS D, то предлагаю простой как кирпич выход: из Вашей таблицы с помощью AWK вырез
aть столбцы, после чего обрабатывать, скармливать R и там окончательно уже работать с данными. Я сначала попрoбовал открыть Вашу таблицу в Екселе/Оффисе и нашел, что столбцы в таблице фиксированной ширины в 31 символ, поэтому отрезаем столбик из файла, сохраняем во временном файле tmp, затем с помощью того же AWK заменяем пробелы (в вырезанном столбце) на табы чтобы сохранить в файле с тайм-меткой, относящейся к этому столбцу:
Код:
awk '{print substr($0,1,31)}' data.txt > tmp1 && awk -v OFS="\t" '$1=$1' tmp1 > Time16-1641.txt
(Also)
Для выделения 2-го, 3-го и последующих столбцов используйте инкремент во втором параметре AWK print substr по тридцать:
awk '{print substr($0,31,31)}' data.txt > tmp2
awk '{print substr($0,61,31)}' data.txt > tmp3
awk '{print substr($0,91,31)}' data.txt > tmp4
awk '{print substr($0,121,31)}' data.txt > tmp5
...
Получаем:
Код:
E = -2652.20741406
Total cycs: 18
Step number 1 of 241
Max F 0.003437 0.000450 NO
RMS F 0.000715 0.000300 NO
Max D 0.756740 0.001800 NO
RMS D 0.166545 0.001200 NO
E = -2652.20628340
Total cycs: 15
Step number 2 of 241
Max F 0.004916 0.000450 NO
RMS F 0.001127 0.000300 NO
Max D 0.569033 0.001800 NO
RMS D 0.128685 0.001200 NO
E = -2652.20763785
...........
Затем импортируем полученный файл в R
Код:
> data <- read.delim2("Time16-1641.txt", header = FALSE)
Вложение:
R.jpg [ 43.12 Кб | Просмотров: 0 ]
, индексируем те строчки, в которых есть нужные нам параметры.
Код:
> idx_maxf <- which(data$V1 == "Max" & data$V2 == "F" )
> idx_rmsf <- which(data$V1 == "RMS" & data$V2 == "F" )
> idx_maxd <- which(data$V1 == "Max" & data$V2 == "D" )
> idx_rmsd <- which(data$V1 == "RMS" & data$V2 == "D" )
Обычно структура команды такая:
idx <- which("условие") но из-за того, что нам пришлось заменить пробелы на табы, Мах и F оказались в разных столбцах, поэтому приходится использовать комбинацию условий.
После этого записываем в MaxF (RMSF/MaxD/RMSD) все значения из столбца data$V3 с индексами idx_maxf (idx_rmsf / idx_maxd / idx_rmsd)
(MaxF)
> MaxF <- data$V3[idx_maxf]
> MaxF
[1] 0.003437 0.004916 0.002526 0.003274 0.013747 0.002389 0.002595 0.005798 0.002762 0.002285 0.001634 0.001637 0.001444 0.001388 0.001751 0.002442 0.002166
[18] 0.001364 0.000796 0.001466 0.001522 0.001100 0.000493 0.000434 0.000711 0.000606 0.000270 0.000127 0.000290 0.000220 0.000095 0.000069 0.000121 0.000104
[35] 0.000051 0.000056 0.000093 0.000081 0.000041 0.000055 0.000117 0.000151 0.000123 0.000072 0.000083 0.000116 0.000102 0.000118 0.000160 0.000120 0.000243
[52] 0.000141 0.000153 0.000151 0.000182 0.000064 0.000213 0.000231 0.000145 0.002967 0.000143 0.002089 0.000152 0.000065 0.000063 0.000293 0.000861 0.000420
[69] 0.000567 0.000338 0.000985 0.000402 0.000544 0.007882 0.000144 0.000142 0.022328 0.000130 0.016594 0.000139 0.002148 0.000477 0.000147 0.000343 0.000137
[86] 0.002042 0.000149 0.013459 0.000135 0.002167 0.000418 0.000385 0.002601 0.000083 0.000139 0.004786 0.000074 0.001147 0.000510 0.000479 0.002008 0.000697
[103] 0.000456 0.025461 0.000085 0.032631 0.000082 0.000151 0.001978 0.000080 0.000212 0.005716 0.000077 0.000112 0.000195 0.004909 0.000073 0.000106 0.002455
[120] 0.000081 0.000134 0.006881 0.000079 0.000825 0.002201 0.000088 0.000196 0.000832 0.000414 0.005320 0.000059 0.000073 0.007069 0.000161 0.003449 0.000062
[137] 0.003143 0.000079 0.001583 0.000076 0.007688 0.000101 0.000326 0.002751 0.000077 0.000442 0.001408 0.000078 0.000362 0.000527 0.000448 0.061179 0.014814
[154] 0.023395 0.000086 0.029230 0.000092 0.003432 0.000534 0.001017 0.000318 0.040633 0.012013 0.017319 0.012152 0.000094 0.007348 0.000098 0.001078 0.001042
[171] 0.001169 0.000561 0.000373 0.000336 0.001234 0.000516 0.040857 0.000122 0.001229
913 Levels: -2652.20415575 -2652.20570328 -2652.20628340 -2652.20635612 -2652.20696237 -2652.20732650 -2652.20741406 -2652.20763785 ... 99
> RMSF <- data$V3[idx_rmsf]
> MaxD <- data$V3[idx_maxd]
> RMSD <- data$V3[idx_rmsd]
отсюда уже можно выбирать нужные 20 чисел
Код:
df <- MaxF[1:20]
(или, скажем,
RMSD[159:179]) для графического представления и т.д.
Отмечу еще, что в
Вашей первоначальной таблице данных в столбцах 4, 11, 12 отсутствуют записи
Max F, а в столбцах 5 -6 -7 отсутствуют
RMS D. Ну на это Вы уже ответили