Почему цикл в 1 до уникального значения возвращает 1 - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть следующие данные:

Class       Identifier  Configuration   Total_individuals   Total_goals Step    1       2   3   4   5
Class       Identifier  Configuration   Total_individuals   Total_goals Step    Root    IFNE    IFNE    IFEQ    IFEQ
Class       Identifier  Configuration   Total_individuals   Total_goals Step    Root    true    false   true    false
JDayChooser d6978cda    No_Reduction    1000                208         1       0   11  11  11  11
JDayChooser d6978cda    No_Reduction    1000                208         2       0   11  11  11  11
JDayChooser d6978cda    No_Reduction    1000                208         3       0   11  11  11  11
JDayChooser d6978cda    No_Reduction    1000                208         4       0   11  11  11  11
JDayChooser d6978cda    No_Reduction    1000                208         5       0   11  11  11  11

Первые две строки дают некоторую информацию, которая будет использоваться позже, но сейчас я их удаляю. Тогда мне нужно использовать al oop с ограничением числа Total_goals:

  df <- read.csv("")
  df <- df[-c(1:2), ] #to delete the first two lines
  total_branches <- unique(df$Total_goals)
  for(j in 1:total_branches){
    print(j)
  }

Это дает следующие результаты:

[1] 208
Levels: 208 Total_goals
[1] 1

Прежде всего, почему он все еще печатает слово Total_goals в уровнях, хотя я удалил строки, содержащие это значение? Кроме того, почему l oop не работает? он печатает только 1.

Воспроизводимые данные:

structure(list(Class = structure(c(2L, 2L, 1L, 1L, 1L, 1L, 1L
), .Label = c("accessories.plugins.time.JDayChooser", "Class"
), class = "factor"), Identifier = structure(c(2L, 2L, 1L, 1L, 
1L, 1L, 1L), .Label = c("d6978cda", "Identifier"), class = "factor"), 
    Configuration = structure(c(1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("Configuration", 
    "No_Reduction"), class = "factor"), Total_individuals = structure(c(2L, 
    2L, 1L, 1L, 1L, 1L, 1L), .Label = c("1000", "Total_individuals"
    ), class = "factor"), Total_goals = structure(c(2L, 2L, 1L, 
    1L, 1L, 1L, 1L), .Label = c("208", "Total_goals"), class = "factor"), 
    Step = structure(c(6L, 6L, 1L, 2L, 3L, 4L, 5L), .Label = c("1", 
    "2", "3", "4", "5", "Step"), class = "factor"), X1 = structure(c(2L, 
    2L, 1L, 1L, 1L, 1L, 1L), .Label = c("0", "Root"), class = "factor"), 
    X2 = structure(c(2L, 3L, 1L, 1L, 1L, 1L, 1L), .Label = c("11", 
    "IFNE", "true"), class = "factor"), X3 = structure(c(3L, 
    2L, 1L, 1L, 1L, 1L, 1L), .Label = c("11", "false", "IFNE"
    ), class = "factor"), X4 = structure(c(2L, 3L, 1L, 1L, 1L, 
    1L, 1L), .Label = c("11", "IFEQ", "true"), class = "factor"), 
    X5 = structure(c(3L, 2L, 1L, 1L, 1L, 1L, 1L), .Label = c("11", 
    "false", "IFEQ"), class = "factor")), class = "data.frame", row.names = c(NA, 
-7L))

1 Ответ

2 голосов
/ 09 апреля 2020

Ответ на оба ваших вопроса: столбцы класса factor.

Когда вы делаете:

df <- df[-c(1:2), ]

Вы удаляете строки, но уровни факторов все еще там.

levels(df$Total_goals)
#[1] "208"         "Total_goals"

Чтобы избавиться от этого нужно использовать droplevels.

df <- droplevels(df[-c(1:2), ])

levels(df$Total_goals)
#[1] "208"

Теперь, даже если вы упали, уровень Total_goals все еще является фактором. Чтобы преобразовать в число c, сделайте

df$Total_goals <- as.numeric(as.character(df$Total_goals))

, а затем выполните команду for l oop

total_branches <- unique(df$Total_goals)
for(j in 1:total_branches){
    print(j)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...