我刚刚发现与tibble
和dummies
程序包的奇怪交互,这两个程序我都非常依赖。请参见下面的第一个代码:
data.frame(year = c(2015, 2016, 2017, 2018)) %>%
dplyr::mutate(year = as.factor(year)) %>%
dummies::dummy.data.frame(., dummy.classes = "factor")
可以正确产生
year2015 year2016 year2017 year2018
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
如果我们在管道中添加as.tibble()
,那么
data.frame(year = c(2015, 2016, 2017, 2018)) %>%
dplyr::mutate(year = as.factor(year)) %>%
as.tibble() %>%
dummies::dummy.data.frame(., dummy.classes = "factor")
它产生
year
1 2015
2 2016
3 2017
4 2018
如果我们在第二个代码中添加dummy.data.frame
的另一个额外步骤,那么
data.frame(year = c(2015, 2016, 2017, 2018)) %>%
dplyr::mutate(year = as.factor(year)) %>%
as.tibble() %>%
dummies::dummy.data.frame(., dummy.classes = "factor") %>%
dummies::dummy.data.frame(., dummy.classes = "factor")
它再次产生
year2015 year2016 year2017 year2018
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
无法完全弄清这里发生了什么,也没有在GitHub上看到问题。目前,我的解决方法是在与as.data.frame()
一起工作时将dummies
添加到管道中,但只是对为什么必须这样做感到好奇。