Страница 1 из 1
Рассчет простой статистики
Добавлено: 13 янв 2009, 17:43
Igg
Уважаемые коллеги !
Не подскажете ли как реализовать следующую задачу в R
есть файл данных (.csv) - сезонные значения NDVI для набора тестовых полигонов . Формат следующий:
NDVI1 NDVI2 NDVI3 NDVI4 NDVI5 ID
8217 8571 8485 8706 8464 65
8153 8498 8578 8808 8542 65
8179 8508 8578 8810 8468 65
8390 8759 8686 8947 8635 65
8390 8759 8686 8947 8635 66
8339 8664 8648 8847 8622 66
8339 8664 8648 8847 8622 66
8255 8581 8590 8283 8596 66
NDVI1- значения индекса (*1000) за определенный период, ID - номер полигона , всего 150 , а (всего записей порядка 15000)
Нужно:
1) для каждого полигона посчитать статистику сезонного изменения значения индекса : среднее и станд.откл. (напр для NDVI1 для ID = 65 и т.д.)
Re: Рассчет простой статистики
Добавлено: 14 янв 2009, 04:09
Максим Дубинин
NDVI1 NDVI2 NDVI3 NDVI4 NDVI5 ID
8217 8571 8485 8706 8464 65
8153 8498 8578 8808 8542 65
никак не могу понять, почему одному полигону ID=65 соответствует несколько записей, он составной чтоли? из нескольких частей? Тогда не
ID - номер полигона
а ID - класс, категория и т.п., так? и считать надо не для полигонов, а для классов?
Re: Рассчет простой статистики в R
Добавлено: 15 янв 2009, 19:12
Igg
Для каждого полигона имеется несколько значений NDVI (точки внутри полигона) -т.е. это можно назвать классом (в данном примере 2 класса - 65,66)
Re: Рассчет простой статистики
Добавлено: 15 янв 2009, 20:50
Максим Дубинин
А, так это точки были, понял. В общем считается просто, буквально одной командой, следующим образом:
Код: Выделить всё
data = read.table("c:\\temp\\test.csv",header=T,sep=" ")
aggregate(data,list(ID = data$ID),sum)
Команде aggregate задается список уникальных идентификаторов, который также берется из самих данных, кстати это причина, почему результат имеет в конце колонку ID, так как при этом из анализируемых данных она не удаляется, можно сделать изящнее, вот так, ограничив то, что считается первыми 5 столбцами, результат будет тот же, но от лишнего столбца в конце избавимся:
Код: Выделить всё
aggregate(data[1:5],list(ID = data$ID),sum)
По-моему очень круто

Re: Рассчет простой статистики
Добавлено: 22 янв 2009, 21:21
Igg
Ага , спасибо - проверил работает)
Но по ходу, возникла еще одна проблема: нужно убрать значения меньше определенной величины (например все меньше 8200)
Re: Рассчет простой статистики
Добавлено: 22 янв 2009, 21:24
Максим Дубинин
в два шага, очень просто
1. сначала создать матрицу, где все меньшие значения будут FALSE, а большие TRUE
результат такой
Код: Выделить всё
NDVI1 NDVI2 NDVI3 NDVI4 NDVI5 ID
[1,] FALSE FALSE FALSE FALSE FALSE TRUE
[2,] TRUE FALSE FALSE FALSE FALSE TRUE
[3,] TRUE FALSE FALSE FALSE FALSE TRUE
[4,] FALSE FALSE FALSE FALSE FALSE TRUE
[5,] FALSE FALSE FALSE FALSE FALSE TRUE
[6,] FALSE FALSE FALSE FALSE FALSE TRUE
[7,] FALSE FALSE FALSE FALSE FALSE TRUE
[8,] FALSE FALSE FALSE FALSE FALSE TRUE
2. обнулить, все что False
результат
Код: Выделить всё
NDVI1 NDVI2 NDVI3 NDVI4 NDVI5 ID
1 0 0 0 0 0 65
2 8153 0 0 0 0 65
3 8179 0 0 0 0 65
4 0 0 0 0 0 65
5 0 0 0 0 0 66
6 0 0 0 0 0 66
7 0 0 0 0 0 66
8 0 0 0 0 0 66
Re: Рассчет простой статистики
Добавлено: 22 янв 2009, 21:43
Igg
Спасибо!
Re: Рассчет простой статистики
Добавлено: 30 янв 2009, 16:22
Igg
нашел как еще проще)
data[data > 8000]<-NA
Re: Рассчет простой статистики
Добавлено: 31 янв 2009, 04:37
Максим Дубинин
чистый восторг! спасибо