Запись переменных с R - PullRequest
24 голосов
/ 21 марта 2011

Запись переменных в R, кажется, моя самая большая головная боль.Какие функции, пакеты, процессы вы используете для обеспечения наилучшего результата?

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

Примечание: это может быть тема вики сообщества.

Ответы [ 5 ]

20 голосов
/ 21 марта 2011

Перекодирование может означать много вещей, и в корне сложно.

Изменение уровней фактора можно выполнить с помощью функции levels:

> #change the levels of a factor
> levels(veteran$celltype) <- c("s","sc","a","l")

Преобразование непрерывногопеременная просто включает применение векторизованной функции:

mtcars $ mpg.log <- log (mtcars $ mpg) </p>

Для разбивки непрерывных данных посмотрите на cutи cut2 (в пакете hmisc).Например:

> #make 4 groups with equal sample sizes
> mtcars[['mpg.tr']] <- cut2(mtcars[['mpg']], g=4)
> #make 4 groups with equal bin width
> mtcars[['mpg.tr2']] <- cut(mtcars[['mpg']],4, include.lowest=TRUE)

Для записи непрерывных или факторных переменных в категориальную переменную в пакете автомобиля есть recode и в пакете Deducer recode.variables

> mtcars[c("mpg.tr2")] <- recode.variables(mtcars[c("mpg")] , "Lo:14 -> 'low';14:24 -> 'mid';else -> 'high';")

Если выищите графический интерфейс, Deducer реализует перекодирование с помощью диалогов Transform и Recode:

http://www.deducer.org/pmwiki/pmwiki.php?n=Main.TransformVariables

http://www.deducer.org/pmwiki/pmwiki.php?n=Main.RecodeVariables

10 голосов
/ 11 ноября 2014

Я нашел mapvalues из plyr упаковки очень удобно.Пакет также содержит функцию revalue, которая похожа на car:::recode.

. Следующий пример "перекодирует"

> mapvalues(letters, from = c("r", "o", "m", "a", "n"), to = c("R", "O", "M", "A", "N"))
 [1] "A" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "M" "N" "O" "p" "q" "R" "s" "t" "u" "v" "w" "x" "y" "z"
9 голосов
/ 04 декабря 2013

Мне очень удобно, когда нужно преобразовать несколько значений (это как делать перекодировки в Stata):

# load package and gen some data
require(car)
x <- 1:10

# do the recoding
x
## [1]   1   2   3   4   5   6   7   8   9  10

recode(x,"10=1; 9=2; 1:4=-99")
## [1] -99 -99 -99 -99   5   6   7   8   2   1
5 голосов
/ 21 марта 2011

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

df <- data.frame(example=letters[1:26]) 
example <- as.character(df$example)
example[example %in% letters[1:20]] <- "a"
example[example %in% letters[21:26]] <- "b"

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

df <- data.frame(example=1:100)
example <- as.numeric(df$example)
example[example < 20] <- 1
example[example >= 20 & example < 80] <- 2
example[example >= 80] <- 3
2 голосов
/ 26 июля 2017

Если вы хотите перекодировать уровни фактора, forcats может пригодиться.Вы можете прочитать главу R для Data Science для обширного учебного пособия, но вот суть.

library(tidyverse)
library(forcats)
gss_cat %>%
  mutate(partyid = fct_recode(partyid,
                           "Republican, strong"    = "Strong republican",
                           "Republican, weak"      = "Not str republican",
                           "Independent, near rep" = "Ind,near rep",
                           "Independent, near dem" = "Ind,near dem",
                           "Democrat, weak"        = "Not str democrat",
                           "Democrat, strong"      = "Strong democrat",
                           "Other"                 = "No answer",
                           "Other"                 = "Don't know",
                           "Other"                 = "Other party"
  )) %>%
  count(partyid)
#> # A tibble: 8 × 2
#>                 partyid     n
#>                  <fctr> <int>
#> 1                 Other   548
#> 2    Republican, strong  2314
#> 3      Republican, weak  3032
#> 4 Independent, near rep  1791
#> 5           Independent  4119
#> 6 Independent, near dem  2499
#> # ... with 2 more rows

Вы даже можете позволить R решать, какие категории (уровни факторов)слиться воедино.

Иногда вам просто нужно объединить все небольшие группы, чтобы упростить график или таблицу.Это работа fct_lump ().[...] Поведение по умолчанию состоит в том, чтобы постепенно объединять наименьшие группы, гарантируя, что совокупность остается наименьшей группой.

gss_cat %>%
  mutate(relig = fct_lump(relig, n = 10)) %>%
  count(relig, sort = TRUE) %>%
  print(n = Inf)
#> # A tibble: 2 × 2
#>        relig     n
#>       <fctr> <int>
#> 1 Protestant 10846
#> 2      Other 10637
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...