r - R:使用cross()对分类数据进行编码
问题描述
我有一个具有字符类型特征的数据集(并非全部都是二进制的,其中一个代表一个区域)。
为了避免多次使用该函数,我尝试使用管道和 cross() 来识别所有字符类型的列,并使用创建的函数对它们进行编码。
encode_ordinal <- function(x, order = unique(x)) {
x <- as.numeric(factor(x, levels = order, exclude = NULL))
x
}
dataset <- dataset %>%
encode_ordinal(across(where(is.character)))
但是,当我收到错误消息时,似乎我没有正确使用 cross():
错误:across()
只能在 dplyr 动词中使用。
我想知道我是否过于复杂了,有一种更简单的方法可以实现这一点,即识别字符类型的所有特征并对其进行编码。
解决方案
您应该调用across
and encode_ordinal
inside mutate
,如下例所示:
dataset <- tibble(x = 1:3, y = c('a', 'b', 'b'), z = c('A', 'A', 'B'))
# # A tibble: 3 x 3
# x y z
# <int> <chr> <chr>
# 1 1 a A
# 2 2 b A
# 3 3 b B
dataset %>%
mutate(across(where(is.character), encode_ordinal))
# # A tibble: 3 x 3
# x y z
# <int> <dbl> <dbl>
# 1 1 1 1
# 2 2 2 1
# 3 3 2 2
推荐阅读
- javascript - 找不到模块 @babel/preset-polyfill
- java - Apache POI (excel) 执行 getSheet() 与 createSheet()
- vba - 运行 vba 时彭博数据不刷新
- objective-c - MacOS 可访问性 API 更改所选范围位置的值
- mysql - 将表情符号保存到数据库并在 DIV Ionic 3 中显示
- java - 建议堆叠多少个活动?
- algorithm - 避免 2D 游戏引擎中的嵌套 for 循环
- keras - google colab 出现 OOM 问题
- android - 如何将圆形 ImageView 添加到按钮的左侧?
- java - 做一个 compareTo 覆盖失败,简单的类