有人知道我如何在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做到这一点,有没有人做过?
答案 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))