如何更改编码为“的值”;是”;R中的值为1?
我的数据库中的变量被编码为“是”和“否”,但我希望将其编码为“1”和“2” 我试图使用如何更改编码为“的值”;是”;R中的值为1?,r,R,我的数据库中的变量被编码为“是”和“否”,但我希望将其编码为“1”和“2” 我试图使用ifelse创建一个新变量,但当我列出它时,它没有工作,如下所示: CA <- ifelse((CANCER == "Yes"),1 ifelse(( CANCER == "No"),2 ))) list(CA) [[1]] NULL CA假设 levels(CANCER) 返回 Levels: yes no Levels: yes no 如果你只是说 CA<-factor(as.nu
ifelse
创建一个新变量,但当我列出它时,它没有工作,如下所示:
CA <- ifelse((CANCER == "Yes"),1
ifelse(( CANCER == "No"),2 )))
list(CA)
[[1]]
NULL
CA假设
levels(CANCER)
返回
Levels: yes no
Levels: yes no
如果你只是说
CA<-factor(as.numeric(CANCER))
返回
Levels: yes no
Levels: yes no
您可以这样更改级别
levels(Cancer)[1]<-"1"
levels(Cancer)[2]<-"2"
等级(癌症)[1]我们需要知道你的变量是否是一个因素。假设
foo <- c("yes","no","no","yes")
如果要使用ifelse
CA <- ifelse(CANCER=="Yes", 1, 2)
CA如果强制使用按顺序设置的级别设置的系数“是”、“否”
:
这给了你:
[1] 1 2 2 1
我只是想补充一点(当我第一次遇到这种类型的东西时,这对我很有帮助),除非明确说明,因子的级别是按字母顺序排列的
这不适用于这个特定的问题,因为癌症列中的因子水平是明确排序的。但是,对于使用
my_df <- read.csv(file = "myfile.csv", stringsAsFactors = TRUE)
非常有用,因为现在每个“否”都是0
,每个“是”都是1
希望这对其他人有所帮助。或者,如果您有两个以上的选项,您可以使用merge()
函数
例如,如果您有此数据帧:
dtf <- data.frame(CANCER = c("No", "Yes", "Yes", "No"),
x = c(4, 5, 6, 7),
# Keep character variables as characters, do not create factors
stringsAsFactors = FALSE)
merge(dtf, moreinfo, by = "CANCER")
CANCER x CA
1 No 4 2
2 No 7 2
3 Yes 5 1
4 Yes 6 1
注意:关于stringsAsFactors
参数,很抱歉,有必要防止R使用您的字符变量自动创建因子,我建议在使用read.csv()加载数据时也使用它 派对有点晚了,但你可以通过dplyr变异和重新评估来做到这一点
cancer_dat <- data.frame(CANCER = c("No", "Yes", "Yes", "No"),
x = c(4, 5, 6, 7))
cancer_dat =cancer_dat %>% mutate(CANCER = revalue(factor(cancer_dat$CANCER),
c("Yes" = "1", "No" = "0")))
cancer_dat%突变(cancer=重新估价(因子(cancer_dat$cancer)),
c(“是”=“1”,“否”=“0”))
重估允许您以“旧名称”、“新名称”的形式将因子名称更改为其他名称为什么?我总是喜欢更多的信息标签,如是和否;它们的信息量更大,所以当我在六个月后不得不重新进行分析时,我能够记住它们的意思。我不知道切换到数字代码有什么好处,可以保存文件大小。因为您可能想对数据进行数字计算。@Aaron谁在乎呢?每个程序员都有自己的偏好和编程需求。存在一个常见的误解(由于旧版本的SPSS等),即要对数据集进行分析,数据,甚至分类变量,必须存储为数值。这与R或我所知道的任何现代统计软件都不一样。我问这个问题是为了获得更多关于他们潜在需求的信息,因为我担心这是一个。我不确定这是否聪明:is.factor(foo)FALSE is.character(foo)TRUE@Momo,你是对的,我们不知道OP的变量是否是一个因子。我调整了我的答案。很好,但我的意思是重新标记的结果应该是一个因子,而不是一个字符向量。@Momo,我不同意,事实上-如果原始向量是一个因子,重新标记的结果应该是一个因子。不需要更改数据类型作为重新标记的副作用。@Aaron,不,如果foo
是一个因素,那么foo[foo==“yes”]
[1] 1 2 2 1
my_df <- read.csv(file = "myfile.csv", stringsAsFactors = TRUE)
my_df$CANCER <- as.numeric(my_df$CANCER) - 1
dtf <- data.frame(CANCER = c("No", "Yes", "Yes", "No"),
x = c(4, 5, 6, 7),
# Keep character variables as characters, do not create factors
stringsAsFactors = FALSE)
moreinfo <- data.frame(CANCER = c("Yes", "No"),
CA = c(1, 2),
stringsAsFactors = FALSE)
merge(dtf, moreinfo, by = "CANCER")
CANCER x CA
1 No 4 2
2 No 7 2
3 Yes 5 1
4 Yes 6 1
cancer_dat <- data.frame(CANCER = c("No", "Yes", "Yes", "No"),
x = c(4, 5, 6, 7))
cancer_dat =cancer_dat %>% mutate(CANCER = revalue(factor(cancer_dat$CANCER),
c("Yes" = "1", "No" = "0")))