2015-08-20 7 views
6

Ich verstehe, dass magrittr::inset() in der Lage sein sollte, einen Vektor einer neuen Spalte in einem Datenrahmen zuzuordnen (als eine Art Gegenteil von extract()). Aber ich verstehe nicht, wie die Syntax funktionieren soll.Wie verwende ich magritr :: inset()?

Sagen wir, ich habe, als Spielzeug Beispiel:

df = data.frame(id = 1:26, letter = letters) 
newvalue = rnorm(26) 

I newvalue als neue Spalte innerhalb einer magrittr Kette df hinzufügen möchten. Ich gehe davon aus, es ist so etwas wie:

df %>% 
    inset('new_column_name', newvalue) 

Aber das funktioniert nicht, vermutlich weil ich nicht ganz verstehen, was die Syntax für [<- (für die inset() ist ein Alias) sollte wie folgt aussehen.

Außerhalb eines magrittr Kette, was ich tun konnte:

df['new_column_name'] <- newvalue 

Aber meine Frage ist, wie es innerhalb einer Kette zu tun, wo ich bereits verschiedene und asundry Operationen getan haben.

+0

'df%>% inset (" this ", value = BRIEFE)' – hrbrmstr

+0

Ich denke, dass 'df%>% inset (1: 26, 'new_column', LETTERS) 'funktioniert. – joran

+0

'inset' ist ein Alias ​​für' [<-' Und '[<-' wird normalerweise mit' var [arg1, arg2] <- arg3' aufgerufen, was gleich "[<-" (arg1, arg2, arg3) ist) ' – Vlo

Antwort

6

Unter Ihrem Beispiel vs meiner schnellen Kommentar:

library(magrittr) 

df <- data.frame(id = 1:26, letter = letters) 

newvalue <- rnorm(26) 

Hier ist alles, was Sie tun müssen:

df %>% inset("newvalue", value=newvalue) 

## id letter newvalue 
## 1 1  a -0.44805172 
## 2 2  b -0.36284495 
## 3 3  c 1.56175094 
## 4 4  d 1.48775535 
## 5 5  e -0.29086149 
## 6 6  f 0.46456966 
## 7 7  g 0.01130394 
## 8 8  h 0.57100808 
## 9 9  i -0.87445603 
## 10 10  j 0.7 
... 

Aber können Sie magrittr ‚s überspringen inset() insgesamt, da dies funktioniert:

`[<-`(df, "newvalue", value=newvalue) 

## id letter newvalue 
## 1 1  a -0.44805172 
## 2 2  b -0.36284495 
## 3 3  c 1.56175094 
## 4 4  d 1.48775535 
## 5 5  e -0.29086149 
## 6 6  f 0.46456966 
## 7 7  g 0.01130394 
## 8 8  h 0.57100808 
## 9 9  i -0.87445603 
... 

Das Gleiche gilt für: