Проблема с условием If в цикле For - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь найти наибольшее количество людей, которые не выжили в информационном кадре, над которым я работаю.Я использовал цикл for для перебора строк, но у меня возникла проблема.Это не похоже на мое, если условие работает.Говорят, что наибольшее число - 89, но на самом деле это 670.

most_lost <- 0
    for (i in 1:dim(Titanic)[1]) {
      if (Titanic$Survived[i] == "No")  {
        if (Titanic$Freq[i] > most_lost) {
          most_lost <- Titanic$Freq[i]
        }
        print(most_lost)
      }
    }

Это вывод напечатанного most_lost

[1] 0
[1] 0
[1] "35"
[1] "35"
[1] "35"
[1] "35"
[1] "35"
[1] "35"
[1] "35"
[1] "35"
[1] "387"
[1] "670"
[1] "670"
[1] "670"
[1] "89"
[1] "89"

Вот таблица, с которой я работаю

enter image description here

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Если я правильно понимаю, вам не нужен цикл for.

max(Titanic$Freq[Titanic$Survived == "No"])

Эта строка заменяет столбец Freq на строки, в которых столбец Survived имеет значение «Нет», а затем находит максимальное значение для столбца Freq с установленными значениями.

0 голосов
/ 16 октября 2018

Не могли бы вы проверить форматы данных в вашей таблице, например, действительно ли Freq числовой?С приведенными ниже примерами данных ваш код работает для меня - см. Код ниже.В качестве дополнительного примечания было бы лучше, если бы вы не публиковали свои данные в виде рисунка, вместо этого использовали, например, dput(data) и публиковали их выходные данные, чтобы другим было проще импортировать ваши данные и проверить их структуру.Вы можете соответствующим образом отредактировать свой вопрос.

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

Titanic = as.data.frame(cbind(Survived = rep("No", 8), Freq = c(1,2,5,0,2,3,1,1)), stringsAsFactors = F)
#   Survived Freq
# 1       No    1
# 2       No    2
# 3       No    5
# 4       No    1
# 5       No    2
# 6       No    3
# 7       No    1
# 8       No    1
most_lost <- 0
for (i in 1:dim(Titanic)[1]) {
  if (Titanic$Survived[i] == "No")  {
    if (Titanic$Freq[i] > most_lost) {
      most_lost <- Titanic$Freq[i]
    }
    print(most_lost)
  }
}
# [1] "1"
# [1] "2"
# [1] "5"
# [1] "5"
# [1] "5"
# [1] "5"
# [1] "5"
# [1] "5"

max(Titanic[Titanic$Survived == "No", "Freq"])
# [1] "5"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...