2015-08-20 9 views
6

Capisco che magrittr::inset() debba essere in grado di assegnare un vettore a una nuova colonna in un dataframe (come una sorta di opposto di extract()). Ma non capisco come dovrebbe funzionare la sintassi.Come si usa magrittr :: inset()?

dire che ho avuto, come ad esempio giocattolo:

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

vorrei aggiungere newvalue come una nuova colonna DF all'interno di una catena magrittr. Sto assumendo è qualcosa di simile:

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

Ma questo non funziona, presumibilmente perché non capisco quello che la sintassi per [<- (per i quali inset() è un alias) dovrebbe essere simile.

Al di fuori di una catena magrittr, ho potuto fare:

df['new_column_name'] <- newvalue 

Ma la mia domanda è come farlo all'interno di una catena, in cui ho già fatto diverse e asundry operazioni.

+0

'df%>% inset (" questo ", valore = LETTERE)' – hrbrmstr

+0

Penso che forse 'df%>% inset (1: 26, 'new_column', LETTERS)' funzioni. – joran

+0

'inset' è un alias per' [<-' E '[<-' viene solitamente chiamato con' var [arg1, arg2] <- arg3' che è uguale a '" [<- "(arg1, arg2, arg3) ' – Vlo

risposta

6

Prendendo il vostro esempio vs il mio commento veloce:

library(magrittr) 

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

newvalue <- rnorm(26) 

Ecco tutto quello che dovete fare:

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

Ma, si può saltare magrittr s' inset() del tutto dal momento che questo funziona:

`[<-`(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 
... 

Quindi:

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