Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改编码为“的值”;是”;R中的值为1?_R - Fatal编程技术网

如何更改编码为“的值”;是”;R中的值为1?

如何更改编码为“的值”;是”;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

我的数据库中的变量被编码为“是”和“否”,但我希望将其编码为“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.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")))