Извлечение таблицы из таблицы при определенных условиях - PullRequest
2 голосов
/ 19 октября 2019

У меня есть сотни файлов Excel (.xls), и у каждого из них есть (в некоторой случайной строке) «таблица», в которой по три столбца (станция, параметр и единица измерения). Я хочу написать скрипт, который читает все файлы, и когда он читает эти три ячейки (Station, Parameter, Unit) вместе в одну строку, он начинает копировать каждую строку ниже, пока не достигнет конца таблицы. В конце каждой таблицы всегда три NA. Но конец таблицы - это не конец файла, а ниже приведены дополнительные данные, но я не хочу этого.

Моя самая большая проблема заключается в том, что, поскольку я не знаю в каждой строкетаблица будет, я должен сказать R прочитать все строки и обнаружить его, что я не в состоянии сделать.

Ниже я сделал визуализацию образца таблицы, а также написал код, чтобы вы могливоспроизведите это в R.

|NA |NA |NA | | Station | Parameter | Unit | |EST1 | P1 |M | |NA | P2 |KM | |NA | P3 |MM | |EST2 | P1 |M | |NA | P2 |KM | |NA | P3 |MM | |EST3 | P1 |M | |NA | P2 |KM | |NA | P3 |MM | |NA |NA |NA |

код для воспроизведения таблицы:

a= c(NA, 'Station', 'EST1', NA, NA, "EST2", NA, NA, "EST3", NA, NA, NA)

b= c(NA, 'Parameter', 'P1', 'P2', 'P3', 'P1', 'P2', 'P3','P1','P2','P3', NA)

c= c(NA, 'Unit', 'M', 'KM', 'MM','M', 'KM', 'MM','M', 'KM', 'MM', NA)

data =(data.frame(a,b,c))

1 Ответ

1 голос
/ 19 октября 2019

Возможно, это поможет, если в столбце Parameter нет NAs.

library(magrittr)

# find start and ending row of the table
starting_row <- row(data)[which(data$a == "Station"), ][1]
ending_row <- row(data)[which(is.na(data$b)), ][,1] %>% max() -1


# slice the data
table1 <- data[ starting_row:ending_row, ]

table1
>         a         b    c
> 2  Station Parameter Unit
> 3     EST1        P1    M
> 4     <NA>        P2   KM
> 5     <NA>        P3   MM
> 6     EST2        P1    M
> 7     <NA>        P2   KM
> 8     <NA>        P3   MM
> 9     EST3        P1    M
> 10    <NA>        P2   KM
> 11    <NA>        P3   MM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...