2017-12-26 5 views
0

Ich habe gerade ein sehr seltsames Verhalten in der dummies Paket von R beim Stricken in .Rmd festgestellt. Hier ist das reproduzierbare Beispiel.R Dummies Paket seltsame Spalte Namen, wenn über .Rmd gestrickt

--- 
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 
``` 

Was ich erwarte, um zu sehen, wenn ich die df sehen sind schöne 0-1 Spalten von year2016, year2017 und year2018, die das normale Verhalten für das dummies Paket.

Wenn Sie dieses R Markdown-Dokument in RStudio stricken, bringt es stattdessen die folgenden heraus: C:/Users/Kim/Desktop/dummies.Rmd2016, C:/Users/Kim/Desktop/dummies.Rmd2017 und C:/Users/Kim/Desktop/dummies.Rmd2018. Das heißt, es verwendet die gesamte Dokumentadresse, um die Spaltennamen zu erstellen.

Ich verstehe nicht, warum ein solches Verhalten auftritt. Offensichtlich möchte ich Spaltennamen wie year2016, year2017 und year2018 haben.

Antwort

1

Das Problem hängt nicht mit dplyr zusammen, weil wir es mit data.frame() reproduzieren können. Offensichtlich gibt es ein Problem mit der Zuordnung von Spaltenbeschriftungen in der dummy()-Funktion, wenn sie als Teil eines R-Markdown-Dokuments ausgeführt wird. Wie in Lukes Antwort erwähnt, ist eine Abhilfe die Verwendung von dummy.data.frame(). Eine andere Möglichkeit wäre, die colnames()-Funktion zum Umbenennen der Spalten nach dem Binden der Jahr- und Dummy-Variablen mit cbind() zu verwenden, was auch eine dplyr -basierte Lösung ermöglicht.

Dies sollte wahrscheinlich als Fehlerbericht für die dummies-Paket eingereicht werden.

--- 
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 
``` 

... und der Ausgang, der zuerst den Fehler reproduziert.

enter image description here

... zweite, dummies.data.frame() mit dem Fehler zu vermeiden.

enter image description here

Die dplyr Korrektur funktioniert wie folgt.

# 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 
``` 

enter image description here

+1

Danke Len. Ich werde in der Tat einen Fehlerbericht für das '' 'Dummies'' Paket einreichen. – Kim

1

Ich bin mir nicht sicher, warum das Interaktion geschieht, aber diese leichte Modifikation scheint um es zu bekommen:

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

enter image description here

Beachten Sie, dass data.frame von der Basis statt data_frame von dplyr zu machen scheint ein Unterschied.

Verwandte Themen