不等因子级别:强制转换为字符绑定字符和因子向量,强制转换为字符向量绑定字符和因子
Unequal factor levels: coercing to characterbinding character and factor vector, coercing into character vectorbinding character and factor
我不确定这里有什么问题。
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))
想知道第一种情况出错的原因
好吧,正如 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)
我不确定这里有什么问题。
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))
想知道第一种情况出错的原因
好吧,正如 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)