Функция для создания новой переменной не работает в R - PullRequest
0 голосов
/ 15 декабря 2018

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

Например:

levels(d$letters)

[1] a b c d

Общая форма функции:

d$letters.recode[d$letters == "a"] <- 1
d$letters.recode[d$letters == "b"] <- 2
d$letters.recode[d$letters == "c"] <- 3

И с помощью этой функции:

 rc.f <- function(a, b){
   x <- levels(a) 
   y <- length(a)
   b <- NA
   for (i in 1:y){
      z <- b[a==x[i]] <- i
  } 
}

Теоретически, идея состоит в том, что эта функция должна создать другую переменнуюгде a перекодируется как 1, b перекодируется как 2 и т. д.

Однако, когда я запускаю rc.f(d$letters, d$letters.recode), в наборе данных не создаются новые переменные, и функция не возвращает ошибку.

Есть идеи?

Спасибо.

Другой пример набора данных d:

Скажите, что для списка респондентов им назначена категория в зависимости от их региона:

 Respondent   Region        
     1           d
     2           b
     3           g
     4           c 
     5           e
     6           c
     7           f
     8           a

Я ищу способ перекодировать d$Region в числовое значение в d$Region.R.

Используя ту же функцию, что и выше, мне интересно, могу ли яиспользуйте функцию для создания другой переменной в tОн помещает в функцию d$Region и d$Region.R.Таким образом, перекодирование a, b, c, [...], g в 1,2,3, [...], 7.

1 Ответ

0 голосов
/ 16 декабря 2018

Если вы хотите a, b, f, d как 1,2,4,3, тогда используйте следующее

Я обновил ваш код для функции rc.fa немного

  • Удален второй аргумент b, поскольку мы даем b <- NA, поэтому нам не нужен второй аргумент </li>
  • Нам не нужна другая переменная для хранения значения b, поэтому яудалено z
  • Так как каждый аргумент не является фактором, поэтому нам нужно привести его к фактору
  • нам не нужен y, мы можем напрямую указать длину (a) для условия цикла
  • и последняя, ​​но не по значению последняя строка - это вывод функции, если только мы не используем return, поэтому я поставил b в последнем

Код:

rc.f <- function(a)
{
 a<-as.factor(a)
 x <- levels(a) 
 b <- NA
 for (i in 1:length(a))
  {
    b[a==x[i]] <- i
  }
 b
}

давайте возьмем пример

> l<-c("a","b","b","a","a","g","h","y","f","v","h","j","f","d","a","s","s","s")
> l
[1] "a" "b" "b" "a" "a" "g" "h" "y" "f" "v" "h" "j" "f"
[14] "d" "a" "s" "s" "s"
> rc.f(l)
[1]  1  2  2  1  1  5  6 10  4  9  6  7  4  3  1  8  8  8

Если вы хотите a, b, f, d как 1,2,6,4, тогда используйте следующие

rc.f <- function(a)
{
  a<-as.factor(a)
  b <- NA
  for (i in 1:26)
  {
    b[a==letters[i]] <- i
  }
  b
}

давайте рассмотрим пример

> l<-c("a","b","b","a","a","g","h","y","f","v","h","j","f","d","a","s","s","s")
> l
[1] "a" "b" "b" "a" "a" "g" "h" "y" "f" "v" "h" "j" "f" "d"
[15] "a" "s" "s" "s"
> rc.f(l)
[1]  1  2  2  1  1  7  8 25  6 22  8 10  6  4  1 19 19 19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...