У меня есть данные в сетке в формате простого текста ASCII
(, пожалуйста, посмотрите исходные необработанные данные на лету ), и все наблюдения данных проводились на ежедневном уровне, где годовые данные были собраны в сетке. Однако я хочу восстановить эти данные, потому что я хочу делать ежегодную статистику. Для этого мне нужно восстановить эти простые текстовые данные в виде табличных данных в виде матриц, где ежедневное наблюдение за данными будет в новых столбцах, так что было бы легче сделать среднее значение за год.
обновление
Поскольку исходные необработанные текстовые данные (( посмотрите на исходные необработанные данные на лету )) довольно большие, здесь я просто приведу общий обзор исходных данных.
обновление 2 :
Я импортировал исходные неформатированные данные в ASCII
в R, вот скрипт R ниже:
rawdata = read.table(file = "~/25_krig_all_1980", header = FALSE, fill = TRUE, comment.char="Y", stringsAsFactors=FALSE )
colnames(rawdata) = c("long", "lat", "precip", "err1", "err2")
Вот как выглядит скелет исходных необработанных текстовых данных (, посмотрите на урезанные необработанные данные на лету ) в notepad++
:
1980 1 1 1
6.125 47.375 0.0 20.00 1.0
6.375 47.375 0.0 19.99 1.0
6.625 47.375 0.0 19.97 1.0
6.875 47.375 0.0 19.84 1.0
7.125 47.375 0.0 20.00 1.0
1980 1 2 2
6.125 47.375 1.5 20.00 1.0
6.375 47.375 1.5 19.99 1.0
6.625 47.375 1.5 19.97 1.0
6.875 47.375 1.5 19.84 1.0
7.125 47.375 2.9 20.00 1.0
1980 1 3 3
6.125 47.375 3.3 20.00 1.0
6.375 47.375 3.3 19.99 1.0
6.625 47.375 3.3 19.97 1.0
6.875 47.375 3.3 19.84 1.0
7.125 47.375 1.3 20.00 1.0
1980 1 4 4
6.125 47.375 3.8 20.00 1.0
6.375 47.375 3.8 19.99 1.0
6.625 47.375 3.8 19.97 1.0
6.875 47.375 3.7 19.84 1.0
7.125 47.375 3.7 20.00 1.0
1980 1 5 5
6.125 47.375 2.2 20.00 1.0
6.375 47.375 2.2 19.99 1.0
6.625 47.375 2.2 19.97 1.0
6.875 47.375 2.2 19.84 1.0
7.125 47.375 4.8 20.00 1.0
Вот мой минимальный пример для объяснения исходных необработанных текстовых данных:
foo = read.table("grid_data_demo.txt", header=FALSE, skip=1, nrows = 5)
colnames(foo) = c("long", "lat", "precip", "err1", "err2")
обновление 3 :
в исходных текстовых данных нет разделителя текста, нет списка, в котором все данные помещены в чистый текст. Я создал miniDat
в качестве воспроизводимого примера, потому что я хочу получить список, подобный объекту, из исходных необработанных данных ((, пожалуйста, посмотрите пример фрагмента данных на лету ))
miniDat = list(dat_19800101 = data.frame(long=c( 6.125 ,6.375, 6.625, 6.875, 7.125),
lat=c(47.375, 47.375, 47.375, 47.375, 47.375),
precip=c(0, 0, 0, 0, 0),
err1=c(20.00, 19.99, 19.97, 19.84, 20.00),
err2=c(1, 1, 1, 1, 1)),
dat_19800102 = data.frame(long=c( 6.125 ,6.375, 6.625, 6.875, 7.125),
lat=c(47.375, 47.375, 47.375, 47.375, 47.375),
precip=c(1.5, 1.5, 1.5, 1.5, 2.9),
err1=c(20.00, 19.99, 19.97, 19.84, 20.00),
err2=c(1, 1, 1, 1, 1)),
dat_19800103 = data.frame(long=c( 6.125 ,6.375, 6.625, 6.875, 7.125),
lat=c(47.375, 47.375, 47.375, 47.375, 47.375),
precip=c(3.3, 3.3, 3.3, 3.3, 1.3),
err1=c(20.00, 19.99, 19.97, 19.84, 20.00),
err2=c(1, 1, 1, 1, 1)),
dat_19800104 = data.frame(long=c( 6.125 ,6.375, 6.625, 6.875, 7.125),
lat=c(47.375, 47.375, 47.375, 47.375, 47.375),
precip=c(3.8, 3.8, 3.8, 3.7, 3.7),
err1=c(20.00, 19.99, 19.97, 19.84, 20.00),
err2=c(1, 1, 1, 1, 1)),
dat_19800105 = data.frame(long=c( 6.125 ,6.375, 6.625, 6.875, 7.125),
lat=c(47.375, 47.375, 47.375, 47.375, 47.375),
precip=c(2.2, 2.2, 2.2, 2.2, 4.8),
err1=c(20.00, 19.99, 19.97, 19.84, 20.00),
err2=c(1, 1, 1, 1, 1)))
Итак, я хочу восстановить табличные данные в виде матриц по исходным необработанным текстовым данным и сделать ежегодную статистику для каждой точки сетки соответственно. Возможно, dplyr
или data.table
предоставляет утилиты для обработки такого рода манипуляций. Есть ли быстрое решение для этого преобразования данных? Как я могу сделать это легко в dplyr
утилитах? Есть идеи?
желаемый вывод :
В ожидаемом выводе
я бы хотел отбросить столбцы fourth (err1)
и fifth (err2)
, сохраняя при этом то же измерение столбцов long
и lat
с соответствующим суточным значением precip
, что и новый столбец. Вот воспроизводимый пример моего ожидаемого результата:
desired_output = data.frame(
long=c( 6.125 ,6.375, 6.625, 6.875, 7.125),
lat=c(47.375, 47.375, 47.375, 47.375, 47.375),
precip_day1=c(0, 0, 0, 0, 0),
precip_day2=c(1.5, 1.5, 1.5, 1.5, 2.9),
precip_day3=c(3.3, 3.3, 3.3, 3.3, 1.3),
precip_day4=c(3.8, 3.8, 3.8, 3.7, 3.7),
precip_day5=c(2.2, 2.2, 2.2, 2.2, 4.8)
)
По сути, я хочу упростить исходные необработанные данные и перестроить их в табличные данные в виде матриц, чтобы упростить вычисления для среднегодового значения precip
для каждой координаты сетки. Для упрощения и эффективности в ожидаемом конечном результате я хочу иметь все столбцы long
, lat
и annual_mn_precip
соответственно.
Как я могу получить эти данные для упрощения и преобразования в R? Есть ли более простой способ сделать это? Спасибо