我不确定这里有什么问题。
dplyr::tibble(x = rnorm(100), group = rep(c('a','b'), 50)) %>%
dplyr::group_by(group) %>%
mutate(bin = OneR::bin(x, nbins = 10))
因子水平不相等:强制字符绑定因子向量,强制为字符向量绑定字符和因子向量,强制为字符向量
但当添加labels = 1:10
时,这是可行的。
dplyr::tibble(x = rnorm(100), group = rep(c('a','b'), 50)) %>%
dplyr::group_by(group) %>%
mutate(bin = OneR::bin(x, nbins = 10, labels = 1:10))
我想知道第一种情况下出错的原因。
发布于 2019-10-23 23:48:31
嗯,正如Matt指出的,这与其说是一个错误,不如说是一个警告。警告依赖于这样一个事实,即您的存储箱依赖于每个组中的数据。由于bin名称(也称为labels
)是自动设置的,因此您可以为每个组获取不同的因子级别。在内部,dplyr将所有组绑定在一起,实际上是将它们加入其中。在连接时,不等因子标签不应该匹配在一起(您只看到字符串,但它在下面以数字形式存储)。因为您更愿意保留每个值的标签,而不是数字,所以dplyr将其转换为字符。请看下面的示例,其中我手动进行分组:
set.seed(0)
dplyr::tibble(x = rnorm(100), group = rep(c('a','b'), 50)) %>%
dplyr::group_by(group) %>%
mutate(bin = OneR::bin(x, nbins = 10))
set.seed(0)
data1 <- dplyr::tibble(x = rnorm(100), group = rep(c('a','b'), 50)) %>%
filter(group == "a") %>%
mutate(bin = OneR::bin(x, nbins = 10))
set.seed(0)
data2 <- dplyr::tibble(x = rnorm(100), group = rep(c('a','b'), 50)) %>%
filter(group == "b") %>%
mutate(bin = OneR::bin(x, nbins = 10))
# same warning pops out
bind_rows(data1, data2)
https://stackoverflow.com/questions/58525204
复制相似问题