假设您注意到大因子中的某些值是相似的.巩固这些价值观的更好策略是什么?我在我的分析中使用了两种策略,这两种策略在性能方面似乎相当.1,将合并逻辑放入一个函数并使用sapply,和2,改变因子级别本身.下面我给出了每个例子.
示例1,将合并逻辑放在函数中并使用sapply:
favorite.color <- c('yellow', 'banana', 'canary yellow', 'aqua', 'blue')
messy.vector.of.favorite.colors <- as.factor(sample(favorite.color, 10000, replace=TRUE))
consolidate.colors <- function(color) {
if(color == 'banana') {
return('yellow')
}
if(color == 'canary yellow') {
return('yellow')
}
if(color == 'aqua') {
return('blue')
}
else {
return(color)
}
}
clean.colors <- as.factor(sapply(as.character(messy.vector.of.favorite.colors), consolidate.colors, USE.NAMES=FALSE))
# Gives factor vector with two levels: blue, yellow
Run Code Online (Sandbox Code Playgroud)
例2,直接改变因子标签本身:
favorite.color <- c('yellow', 'banana', 'canary yellow', 'aqua', 'blue')
messy.vector.of.favorite.colors <- as.factor(sample(favorite.color, 10000, replace=TRUE))
working.vector <- messy.vector.of.favorite.colors
levels(working.vector)[levels(working.vector) == 'banana'] <- 'yellow'
levels(working.vector)[levels(working.vector) == 'canary yellow'] <- 'yellow'
levels(working.vector)[levels(working.vector) == 'aqua'] <- 'blue'
clean.colors <- working.vector
# Gives factor vector with two levels: blue, yellow
Run Code Online (Sandbox Code Playgroud)
最有效的方法是修改关卡.您可以使用以下代码替换代码:
levels(working.vector) <- list(yellow = c("yellow", "banana", "canary yellow"),
blue = c("blue", "aqua"))
Run Code Online (Sandbox Code Playgroud)
一个衬里,无需"找到"值替换数据即可完成工作.
请注意,这levels<-是一个专为此目的而构建的R基元,我很确定它在性能方面胜过大多数解决方案.(编辑:jeremycg刚刚确认了,见下文)
| 归档时间: |
|
| 查看次数: |
2308 次 |
| 最近记录: |