2015-08-20 19 views
6

Ben magrittr::inset() (extract() tersi bir tür) bir dataframe yeni sütuna bir vektör atamak gerekir anlıyoruz. Ama sözdiziminin nasıl çalışması gerektiğini anlamıyorum. magrittr :: inset() öğesini nasıl kullanırım?

bir oyuncak örneği olarak, ben olduğunu farz edelim:

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

Bir magrittr zinciri içinde df için yeni bir sütun olarak newValue eklemek istiyorum. gibi görünmelidir

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

Ama bu oldukça [<- sözdizimi (bunlar için inset() bir diğer adıdır) anlamıyorum muhtemelen çünkü, çalışmıyor: Ben böyle bir şey olduğunu varsayıyorum. Bir magrittr zincirinin

dışında yapabileceğim:

df['new_column_name'] <- newvalue 

Ama benim sorum ben zaten çeşitli ve asundry işlemleri yaptık bir zincir içinde bunu nasıl olduğunu.

+0

'df%>% gömme ("Bu", değer = MEKTUPLAR)' – hrbrmstr

+0

belki düşünmek 'df%>% gömme (1: 26, 'yeni_sütun' MEKTUPLAR)' çalışır. – joran

+0

'inset', '[<-' Ve' [<-' genellikle 'var [arg1, arg2] <- arg3' ile adlandırılır; bu," [<- "(arg1, arg2, arg3) değerine eşittir.) ' – Vlo

cevap

6

benim hızlı comment vs senin örneğini alarak: Burada

library(magrittr) 

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

newvalue <- rnorm(26) 

yapmanız gereken tek şey: Eğer atlayabilirsiniz,

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

Ama magrittr 'ın inset() bu işleri tamamen tarihi:

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

Yani yapar:

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