Как применить метки переменной в другой в R (эквивалент SAS FORMAT) - PullRequest
0 голосов
/ 11 октября 2018

Кто-нибудь знает, как я могу создать формат переменной в R и применить ее к любой другой переменной, которую я хочу?

Более конкретно, я пытаюсь перевести сценарий SAS в сценарий R.

В SAS я могу создать формат переменной следующим образом:

PROC FORMAT

VALUE bool
1 = "Yes"
2 = "No"
3 = "NA"
;

(поэтому переменная bool имеет уровни 1, 2, 3, где 1 будет заменено на «Да»", 2 с" Нет "и т. Д.)

Тогда я могу указать, что для конкретной переменной моего набора данных (myVariable) - которая также имеет уровни 1, 2, 3 - я хочу иметьтот же формат:

FORMAT myVariable bool.;

, поэтому все 1 станут «Да» и т. д. Очевидно, что порядок уровней не совпадает между двумя переменными, я просто хочу применить одинаковые метки.

Я не могу найти, как это сделать с R, кто-нибудь уже сделал это?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

В vanilla R вы можете сделать это:

# create data
df <- data.frame(
  'answers' = c('1','2','3')
)

# make 'answers' into a factor
df$answers <- as.factor(df$answers)

#rename factor levels
levels(df$answers)
[1] "1" "2" "3"

levels(df$answers) <- c('Yes','No','NA')

В Tidyverse это немного менее неуклюже.

# you can also do this within tidyverse
library(tidyverse)

# create data
df <- data.frame(
  'answers' = c('1','2','3')
)

df %>% mutate(answers = as.factor(answers)) %>% 
recode(answers, '1' = 'Yes', '2'='No', '3'='NA')) -> df
0 голосов
/ 11 октября 2018

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

library(dplyr)   
 lvl <- function(y){ifelse(y == 1, "Yes",
                              ifelse(y == 2, "No","NA"))}


df <- data.frame(
  answers = c(1,2,3)
)

df2 <- df %>% mutate(var2 = lvl(answers))
0 голосов
/ 11 октября 2018

Попробуйте поиск вектора.Например.

v <-setNames(c("yes", "no","na"), 1:3))
v[c(1,2,2,3,1,1)]
...