От новичка до гуру: Курсы программирования на CyberDuff

Как я могу использовать циклы для и если

Это мой пример набора данных

> a
  V1   V2
1 A1 5437
2 A1 5437
3 A1 5437
4 A2 1819
5 A2 1758
6 A2 1212
7 A2 1212
8 A3 1456

Я хочу вычислить уникальные значения для столбца V2, поэтому результат будет таким:

A1 1
A2 3
A3 1

Я начал писать свой код, но понятия не имею, как это должно выглядеть:

old_id <- a[1,2]
old_art <- a[2,1]
for (i in nrow(a)){
  if (old_id == a[1,i+2] && old_art == a[i+2,1]){
    new_id[i] <- old_id[1,i+2]
    new_art[i] <- i
  }
  i <- i+1
}

Я знаю очень простое решение, например:

tapply(a[,2], a[,1], function(t) length(unique(t)))

но моя задача - использовать функцию цикла - возможно, для и если


  • Барранка, поверь мне, это не домашнее задание. Можете ли вы помочь мне изменить функцию tapply в цикле? 24.06.2014
  • Я пытался использовать mapreduce (я написал об этом другой вопрос, но люди не поняли моего намерения). Более того, я не могу использовать функцию tapply в mapreduce, мне приходится использовать циклы. 24.06.2014

Ответы:


1

Это звучит как домашнее задание. Но циклы for проходят через все элементы вектора справа от in. Это также означает, что ваш цикл for будет увеличиваться автоматически, поэтому вам не нужен i <- i+1.

Следовательно, ваш цикл for должен выглядеть так

for (i in 1:nrow(a)) {
  < your code >
}
# i <- i + 1 # No need for this!

Обратите внимание на i in 1:nrow(a) и нет i in nrow(a). Я не проверял ваш код, только ваш forсинтаксис. Помните, что for циклов — это просто функции; так

for (i in 1:3) {
  print(i)
}
#[1] 1
#[1] 2
#[1] 3

такой же как

`for`(i, 1:3, print(i))
#[1] 1
#[1] 2
#[1] 3

См. ?"for".

24.06.2014
  • Спасибо за эти предложения (я изменил в своем коде этот фрагмент своего кода), но все еще не могу написать этот код... 24.06.2014

  • 2

    Ваш вопрос, в частности, касается использования for и if. Вот мой подход:

    • Вы можете определить for в двух формах: "классический стиль C" и "векторный стиль".

    "Классический стиль C" будет примерно таким:

    for(i = 1; i <= nrow(a); i = i + 1) {
        # Your code goes here
    }
    

    «Векторный стиль» будет примерно таким:

    for(i in 1:nrow(a)) {
        # Your code goes here
    }
    

    Обратите внимание, что в обоих случаях оператор for увеличивает значение i. Также помните, что в R начальный индекс равен единице (в отличие от многих C-подобных языков, где начальный индекс обычно равен нулю).

    Что касается вашего оператора if, R использует только один & для and (и только один | для or), поэтому ваш оператор if должен выглядеть примерно так:

    if(old_id == a[1,i+2] & old_art == a[i+2,1]) {
        # More code here
    }
    

    Наконец, если вы хотите отладить свой код, перейдите по этой ссылке.

    24.06.2014
    Новые материалы

    Представляем Narwhal Technologies (Nrwl)
    6 декабря 2016 г. Маунтин-Вью, Калифорния С тех пор, как Виктор Савкин и я (Джефф Кросс) присоединились к команде Angular в Google на заре Angular 1, Angular продемонстрировал феноменальный..

    Путь AWS  — «Изучение машинного обучения — 10 начинающих ИИ и машинного обучения на AWS».
    Универсальный ресурсный центр для изучения искусственного интеллекта и машинного обучения. НОЛЬ или ГЕРОЙ, начните свое путешествие здесь. Получите решения и пройдите обучение у экспертов AWS...

    5 простых концепций Python, ставших сложными
    #заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

    «Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
    Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

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