我数据库中的变量被编码为“是”和“否”,但我想有“1”和“2”。
我尝试使用创建一个新变量,ifelse
但是当我list
编辑它时,它不起作用,如下所示:
CA <- ifelse((CANCER == "Yes"),1
ifelse(( CANCER == "No"),2 )))
list(CA)
[[1]]
NULL
我数据库中的变量被编码为“是”和“否”,但我想有“1”和“2”。
我尝试使用创建一个新变量,ifelse
但是当我list
编辑它时,它不起作用,如下所示:
CA <- ifelse((CANCER == "Yes"),1
ifelse(( CANCER == "No"),2 )))
list(CA)
[[1]]
NULL
如果你想使用ifelse
,
CA <- ifelse(CANCER=="Yes", 1, 2)
假设
levels(CANCER)
返回
Levels: yes no
如果您只是说,这可能对您来说是最简单的
CA<-factor(as.numeric(CANCER))
但是,通常您也可以使用
Cancer<-factor(CANCER)
比假设
levels(Cancer)
返回
Levels: yes no
您可以更改级别
levels(Cancer)[1]<-"1"
levels(Cancer)[2]<-"2"
或相应地切换标签。
我们需要知道您的变量是否是一个因素。认为
foo <- c("yes","no","no","yes")
如果 is.factor(foo) 返回 TRUE,例如,如果你这样做了foo <- factor(foo)
,那么使用
levels(foo) <- c("2", "1")
否则使用
foo[foo == "yes"] <- 1
foo[foo == "no"] <- 2
此外, list() 不会做(我认为)你认为它会做的事情。如果要查看 foo 的值,只需输入 foo。执行上面的代码后...
foo
[1] 1 2 2 1
我只是想补充一点(因为当我第一次遇到这种类型的事情时它对我很有帮助)除非明确说明,否则因子的水平按字母顺序排列。
这不适用于这个特定问题,因为 CANCER 列中的因子水平是明确排序的。但是,对于使用读取的任何“是”/“否”编码数据集
my_df <- read.csv(file = "myfile.csv", stringsAsFactors = TRUE)
“否”将被编码为1
,“是”将被编码为2
,因为 N 在字母表中位于 Y 之前。
因此,在这样的环境中:
my_df$CANCER <- as.numeric(my_df$CANCER) - 1
将非常有用,因为现在每个“否”都是 a 0
,每个“是”都是1
希望这对那里的人有帮助。
如果您强制使用按顺序设置的级别的因素"yes","no"
:
foo <- factor(c("yes","no","no","yes"),levels=c("yes","no"))
您可以简单地强制转换为数字:
as.numeric(foo)
这给了你:
[1] 1 2 2 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)
您可以将值编码的新方法存储在另一个数据框中:
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
注意:对不起这个stringsAsFactors
参数,有必要防止 R 用你的字符变量自动创建因子,我建议你在加载数据时也使用它read.csv()
。
聚会有点晚了,但你可以用 dplyr mutate 和 revalue
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")))
revalue 允许您以“旧名称”、“新名称”的形式将因子名称更改为其他名称