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

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
Anhel
Новоприбывший
Сообщения: 6
Зарегистрирован: 20 апр 2017, 13:14
Репутация: 0

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

Сообщение Anhel » 20 апр 2017, 13: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 совсем не так работают, как я предполагал?

gamm
Гуру
Сообщения: 2534
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 517
Ваше звание: программист
Откуда: Казань

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

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

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

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

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

Сообщение Anhel » 20 апр 2017, 22: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 колонкой.
Вот и возник вопрос, как провести сравнение и результаты добавить в новую таблицу?

gamm
Гуру
Сообщения: 2534
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 517
Ваше звание: программист
Откуда: Казань

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

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

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

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

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

Сообщение Anhel » 21 апр 2017, 18: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

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

gamm
Гуру
Сообщения: 2534
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 517
Ваше звание: программист
Откуда: Казань

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

Сообщение gamm » 21 апр 2017, 21: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)
    }
  }
}

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

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

Сообщение Anhel » 21 апр 2017, 21: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)
    }
  }
}
Спасибо большое, буду теперь разбираться что тут происходит)))

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

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

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

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

gamm
Гуру
Сообщения: 2534
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 517
Ваше звание: программист
Откуда: Казань

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

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

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

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

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

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

Спасибо.

Ответить

Вернуться в «R»