我不确定这是什么问题。
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))
我想知道第一种情况下错误的原因。
答案 0 :(得分:2)
正如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)