R dummies通过.Rmd编织时包装怪异的列名

R dummies通过.Rmd编织时包装怪异的列名,r,rstudio,knitr,R,Rstudio,Knitr,我刚刚注意到在.Rmd中编织时,R的假人包装中有一种非常奇怪的行为。这是一个可复制的例子 --- title: "Dummies Package Behavior" author: "Kim" date: '`r Sys.Date()`' output: pdf_document: toc: yes toc_depth: '3' --- Load the libraries ```{r} library(tidyverse) library(dummies) ``` M

我刚刚注意到在
.Rmd
中编织时,R的
假人
包装中有一种非常奇怪的行为。这是一个可复制的例子

---
title: "Dummies Package Behavior"
author: "Kim"
date: '`r Sys.Date()`'
output:
  pdf_document:
    toc: yes
    toc_depth: '3'
---

Load the libraries

```{r}
library(tidyverse)
library(dummies)
```

Main data wrangling

```{r}
df <- data_frame(year = c(2016, 2017, 2018))
temp <- dummy(df$year)
temp <- as_data_frame(temp)
df <- bind_cols(df, temp)
```

View output

```{r}
df
```
---
标题:“傻瓜包行为”
作者:“金”
日期:''r Sys.date()`'
输出:
pdf\U文件:
toc:是的
toc_深度:“3”
---
加载库
```{r}
图书馆(tidyverse)
图书馆(傻瓜)
```
主数据争用
```{r}

df我不确定为什么会发生这种相互作用,但这种轻微的修改似乎可以解决这个问题:

```{r}
df <- data.frame(year = c(2016, 2017, 2018))
df <- data.frame(df, dummy.data.frame(data = df, dummy.classes = "ALL"))
```
`{r}

df问题与
dplyr
无关,因为我们可以使用
data.frame()
复制它。显然,在作为R标记文档的一部分执行时,在
dummy()
函数中分配列标签存在问题。正如Luke在回答中指出的,一种解决方法是使用
dummy.data.frame()
。另一种方法是在使用
cbind()
绑定年份和伪变量后,使用
colnames()
函数重命名列,这也支持基于
dplyr
的解决方案

这可能应该作为
dummies
包的bug报告提交

---
title: "Behavior of dummies package"
author: "anAuthor"
date: "12/26/2017"
output:
  html_document: default
  pdf_document: default
  word_document: default
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

# first, reproduce error with data.frame()

```{r}
library(dummies)
df <- data.frame(year = c(2016, 2017, 2018))
df
dummyCols <- dummy(df$year)
dummyCols <- as.data.frame(dummyCols)
dummyCols
```

# data.frame() approach to fix the error

```{r}
df <- data.frame(year = c(2016, 2017, 2018))
df
dummyCols <- dummy.data.frame(data=df,dummy.classes="ALL")
dummyCols
df <- cbind(df, dummyCols)
df
```

谢谢你,莱恩。我确实会为
傻瓜
软件包提交一份bug报告。
# dplyr approach 

```{r}
library(tidyverse)
df <- data_frame(year = c(2016, 2017, 2018))
temp <- dummy(df$year)
temp <- as_data_frame(temp)
df <- bind_cols(df, temp)
colnames(df) <- c("year",unlist(lapply(2016:2018,function(x) {
     paste("year",x,sep="")
})))
df
```