R: Набор данных становится нулевым при зацикливании? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть набор записей о спортсменах с openpowerlifting.org, и я хочу получить всех спортсменов из определенного подразделения.Записи имеют форму «Встреча ID Имя Секс оборудование Возрастное деление ...», и я хочу извлечь всех тех, кто участвовал в отделе ceratain.Вот мой код:

powerlift <- read.csv("openpowerlifting.csv",header = TRUE,fill = TRUE,stringsAsFactors = FALSE )

n = length(powerlift$TotalKg)

UPA_Open = as.data.frame(matrix(c(rep(0,n*17)),ncol=17))
j=1

for(i in 1:n){
    if(powerlift$Divison[i]=="UPA Open"){
        UPA_Open[j,] = powerlift[i,]
        j = j + 1
    }
 }

Я сталкиваюсь со следующей проблемой:

Error in if (powerlift$Divison[i] == "UPA Open") { : 
  argument is of length zero

и исследую набор данных после выполнения

> i
[1] 1
> powerlift$Division[i]
[1] "Mst 45-49"
> powerlift$Division[i] == "Mst 45-49"
[1] TRUE

, поэтому он остановился после попыткиодна итерация, утверждая, что данные были нулевыми, а это не так.Что происходит?

1 Ответ

0 голосов
/ 11 мая 2018

Пытаясь избежать проблемы XY и учитывая, что вы "хотите получить всех спортсменов из определенного подразделения" , вот альтернатива для вашей проблемы:

# Simulating your data
Division <- c("UPA Open", "DEF", "GHI", "UPA Open", "UPA Open")
someColumn <- c("athlete1", "athlete2", "athlete3", "athlete4" , "athlete5")
otherColumn <- c(11, 22, 33, 44, 55)
powerlift <- data.frame(someColumn, otherColumn, Division)
print(powerlift)

# The actual solution
UPA_Open <- powerlift[powerlift$Division == "UPA Open", ]
print(UPA_Open)

Пояснение:

# Explanation line by line
pos <- powerlift$Division == "UPA Open" # variable pos now contains a vector of TRUE OR FALSE, indicating the lines which Division are equals to "UPA OPEN"
print(pos) # verify the content of pos variable
UPA_Open <- powerlift[pos, ] # Selecting only the lines of the powerlift data.frame which pos is TRUE. powerlift[<<lines>>, <<columns>>].
print(UPA_Open) # print the results

Надеюсь, это поможет! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...