如何在R中将变量的标签应用到另一个变量中(等效于SAS FORMAT)

时间:2018-10-11 16:00:38

标签: r sas format label

有人知道我如何在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 :(得分:0)

尝试查找向量。例如。

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

答案 1 :(得分:0)

在香草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

答案 2 :(得分:0)

如果您想重用格式,也可以创建一个函数(如果有问题,可以不处理任何因素)。

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))