Страница 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
				 Максим Дубинин
				чистый восторг! спасибо