Я пытался написать аналогичную функцию as.numeric в r для моих данных, но есть проблема - PullRequest
0 голосов
/ 13 октября 2019

У меня есть столбик с голами в футболе. Записи являются символьными строками в формате «43» или «90 + 2». В R as.numeric () преобразует массив символов «43» в число 43, но преобразует «90 + 2» в NA. Мне нужна функция, которая превращает значения, подобные последним, в 92. Я попробовал:

    function(y){
    x = vector(mode='numeric',length=length(y))  
    for(i in 1:length(y)){
      for(j in 1:nchar(y[i])){
        if(substring(y[i],j,j)=="+"){
          x[i]=as.numeric(substring(y[i],1,j-1))+as.numeric(substring(y[i],j+1,nchar(y[i])))
        }
        if((substring(y[i],j,j)!="+") & (j==nchar(y[i]))){
          x[i]=as.numeric(y[i])  
        }
      }
    }
    return(x)
   }   

Но это не работает в значениях, таких как "90 + 2". Я не мог определить свою ошибку. Пожалуйста, помогите мне.

1 Ответ

3 голосов
/ 13 октября 2019

После первого оператора должен быть оператор break, присваивающий значение x[i]. Если мы вызовем исправленную функцию Sum, то получим:

y <- c("90+2", "33") # test input
Sum(y)
## [1] 92 33

Обратите внимание, что это также будет работать:

sapply(strsplit(y, "+", fixed = TRUE), function(x) sum(as.numeric(x)))
## [1] 92 33

, как если бы это возвращало именованный числовой вектор:

sapply(y, function(x) eval(parse(text = x)))
## 90+2   33 
##   92   33 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...