如何解决在R中转换因子变量时选择数值
我想将数据框中的因子转换为数值,我会选择自己而不是编码的标签。 有谁知道如何做到这一点? 例如,假设我的可变种族在黑色时编码为1,在白色时编码为2,当我将其转换为.numeric(race)时,我想将黑色设置为0,将白色设置为1?
解决方法
好问题!我做了一些统计咨询,经常发现自己需要清除变量编码的数据集。
这是我创建的用于处理矢量和数据帧输入的函数
Recode <- function(var,...){
x <- list(...)
if(!is.null(dim(var))){temp <- apply(var,MARGIN = 2,as.character)}else{temp <- as.character(var)}
for(i in 1:length(x)){
label <- names(x)[i]
levels <- x[[i]]
temp[temp %in% levels] <- label
}
temp
}
以下是向量输入的示例:
Colour <- c("red","red","blue","green","yellow","white","black","yellow")
Recode(Colour,"1" = c("red","green"),"2" = c("yellow","black")) %>% as.numeric
[1] 1 1 1 1 1 1 2 2 2 2
以下是数据框输入的示例
dat <- data.frame(Day = day.name,Fruit = fruit[1:7])
dat
Day Fruit
1 Monday apple
2 Tuesday apricot
3 Wednesday avocado
4 Thursday banana
5 Friday bell pepper
6 Saturday bilberry
7 Sunday blackberry
Recode(dat,"1" = c("Monday","Tuesday","banana","bell pepper"),"2" = "Friday")
Day Fruit
[1,] "1" "apple"
[2,] "1" "apricot"
[3,] "Wednesday" "avocado"
[4,] "Thursday" "1"
[5,] "2" "1"
[6,] "Saturday" "bilberry"
[7,] "Sunday" "blackberry"
此函数的一个好处是可以将任意数量的参数传递给该函数。例如
Recode(dat,'a' = .....,'b' = .....,'c' = .....,'d' = .....)
此外,如前面的示例所述,重新编码不必是一对一的
我希望这会有所帮助!可能有更好的解决方案,但这至少对我有用
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。