GIS-LAB

Географические информационные системы и дистанционное зондирование


Форумы GIS-Lab.info

Геоинформационные системы (ГИС) и Дистанционное зондирование Земли


Куда смотреть

Вопросы по статистическому пакету R. Не обязательно гео.

Куда смотреть

Сообщение Anhel » 20 апр 2017, 14:25

Добрый день, подскажите пожалуйста, у меня есть таблица данных, мне необходимо сравнить данные каждой колонки с данными другой колонки и результаты поместить в другую таблицу,как это сделать, в какую сторону хотя бы смотреть. Я только начинаю изучать, поэтому сильно не пинайте))))

tabname - Это таблица с именами колонок таблицы mydata

Код: Выделить всё
tabname <- names(mydata)
Pair1<-c(NA)
Pair2<-c(NA)
p_value<-c(NA)
resdata<-data.frame(Pair1,Pair2,p_value)

for(x in length(tabname))
{
  for(i in length(tabname))
  {
    if(x!=i)
    {
      nstr<-list(tabname[i],tabname[x],NA)
      resdata<-rbind(resdata,nstr)
    }
  }
}


Получается что циклы в R совсем не так работают, как я предполагал?
  • 0

Anhel
Новоприбывший
 
Зарегистрирован: 20 апр 2017
 
Сообщения: 6
Репутация: 0

Re: Куда смотреть

Сообщение gamm » 20 апр 2017, 19:22

телепаты в отпуске, Ванга вообще померла, угадать, что вы предполагали, некому - напишите для начала, чего вы хотите. "Хочу сравнить" - это ни о чем :mrgreen:
  • 0

gamm
программист
 
Зарегистрирован: 15 окт 2010
Откуда: Казань (на карте)
 
Сообщения: 2491
Репутация: 502

Re: Куда смотреть

Сообщение Anhel » 20 апр 2017, 23:17

Есть таблица mydata в которой содержится информация в 10 колонках, мне необходимо сравнить все колонки между собой:
Колонка1 сравнить Колонка2 = какой-то результат.
Колонка1 сравнить Колонка3 = какой-то результат.
Колонка1 сравнить Колонка4 = какой-то результат.
Колонка1 сравнить Колонка5 = какой-то результат.
...............................................................
Колонка10 сравнить Колонка8 = какой-то результат.
Колонка10 сравнить Колонка9 = какой-то результат.

Это я попытался сделать в цикле и при каждой итерации вложенного цикла хотел добавлять строку в таблицу
Код: Выделить всё
for(x in length(tabname))
{
  for(i in length(tabname))
  {
    if(x!=i)
    {
      nstr<-list(tabname[i],tabname[x],NA)
      resdata<-rbind(resdata,nstr)
    }
  }
}

но добавляется только последняя строка при условии что будет убрано условие
Код: Выделить всё
if(x!=i)

иначе вообще ничего не добавится так как получится что на последней итерации сравнивается 10 колонка с 10 колонкой.
Вот и возник вопрос, как провести сравнение и результаты добавить в новую таблицу?
  • 0

Anhel
Новоприбывший
 
Зарегистрирован: 20 апр 2017
 
Сообщения: 6
Репутация: 0

Re: Куда смотреть

Сообщение gamm » 21 апр 2017, 16:14

Anhel писал(а):Колонка1 сравнить Колонка2 = какой-то результат.
вы так и не сказали, что вы хотите ...
- Командир: Штурман, приборы!
- Штурман: 24!
- Командир: Чего 24?
- Штурман: А чего "Приборы" ...
  • 0

gamm
программист
 
Зарегистрирован: 15 окт 2010
Откуда: Казань (на карте)
 
Сообщения: 2491
Репутация: 502

Re: Куда смотреть

Сообщение Anhel » 21 апр 2017, 19:26

gamm писал(а):вы так и не сказали, что вы хотите ...


Пример: Допустим мне надо найти остатки регрессии каждого ряда, а для этого мне надо передавать в функцию
два ряда: f(Колонка1, Колонка2), f(Колонка1, Колонка3), f(Колонка1, Колонка4)......f(Колонка4, Колонка3)

Поэтому я использовал два цикла, но они не оправдали моих ожиданий, по какой причине я писал выше)
Код: Выделить всё
for(x in length(tabname))
{
  for(i in length(tabname))
  {
    ...........
  }
}


Колонка1 Колонка2 Колонка3 Колонка4
10.........5...........8...........13
56.........26..........30.........40

Таблица результата:
Измерение1 Измерение2 Результат
Колонка1 Колонка2 0,01
Колонка1 Колонка3 0,5
Колонка1 Колонка4 0,9
...........................................
Колонка3 Колонка1 0,001
Колонка3 Колонка2 0,5
...........................................
Колонка4 Колонка1 0,23
Колонка4 Колонка2 0,001
Колонка4 Колонка3 0,06

Надеюсь доступно объяснил)
  • 0

Anhel
Новоприбывший
 
Зарегистрирован: 20 апр 2017
 
Сообщения: 6
Репутация: 0

Re: Куда смотреть

Сообщение gamm » 21 апр 2017, 22:18

Anhel писал(а): Надеюсь доступно объяснил)
нет.
но вот это строит табличку с коэффициентами регрессии ...
Код: Выделить всё
foo.tab<-as.data.frame(matrix(rnorm(100),ncol=5,nrow=20))
first<-TRUE
for(i.col1 in 1: ncol(foo.tab)) {
  for(i.col2 in 1:ncol(foo.tab)) {
    if(i.col1 == i.col2) next
    cur.coef<-unname(coef(lm(foo.tab[,i.col1]~foo.tab[,i.col2])))
    cur.res<-data.frame(col1=i.col1,col2=i.col2,a0=cur.coef[1],a1=cur.coef[2])
    if(first) {
      first<-FALSE
      all.res<-cur.res
    } else {
      all.res<-rbind(all.res,cur.res)
    }
  }
}
  • 1

gamm
программист
 
Зарегистрирован: 15 окт 2010
Откуда: Казань (на карте)
 
Сообщения: 2491
Репутация: 502

Re: Куда смотреть

Сообщение Anhel » 21 апр 2017, 22:49

gamm писал(а):
Anhel писал(а): Надеюсь доступно объяснил)
нет.
но вот это строит табличку с коэффициентами регрессии ...
Код: Выделить всё
foo.tab<-as.data.frame(matrix(rnorm(100),ncol=5,nrow=20))
first<-TRUE
for(i.col1 in 1: ncol(foo.tab)) {
  for(i.col2 in 1:ncol(foo.tab)) {
    if(i.col1 == i.col2) next
    cur.coef<-unname(coef(lm(foo.tab[,i.col1]~foo.tab[,i.col2])))
    cur.res<-data.frame(col1=i.col1,col2=i.col2,a0=cur.coef[1],a1=cur.coef[2])
    if(first) {
      first<-FALSE
      all.res<-cur.res
    } else {
      all.res<-rbind(all.res,cur.res)
    }
  }
}


Спасибо большое, буду теперь разбираться что тут происходит)))
  • 0

Anhel
Новоприбывший
 
Зарегистрирован: 20 апр 2017
 
Сообщения: 6
Репутация: 0

Re: Куда смотреть

Сообщение Anhel » 27 апр 2017, 21:51

Скажите пожалуйста, как работать с файлами? У меня есть папка в которой лежат файлы, вот мне нужно в цикле обойти все файлы в папке, как это можно сделать? Спасибо.
  • 0

Anhel
Новоприбывший
 
Зарегистрирован: 20 апр 2017
 
Сообщения: 6
Репутация: 0

Re: Куда смотреть

Сообщение gamm » 28 апр 2017, 06:36

list.files() создает вектор с именами, потом цикл по вектору ...
  • 0

gamm
программист
 
Зарегистрирован: 15 окт 2010
Откуда: Казань (на карте)
 
Сообщения: 2491
Репутация: 502

Re: Куда смотреть

Сообщение Anhel » 02 май 2017, 17:55

Спасибо.
  • 0

Anhel
Новоприбывший
 
Зарегистрирован: 20 апр 2017
 
Сообщения: 6
Репутация: 0


Вернуться в R

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


(Геокруг)

© GIS-Lab и авторы, 2002-2013. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов (подробнее).