我如何使用magrittr :: inset()?

时间:2015-08-20 16:56:09

标签: r magrittr

我知道magrittr::inset()应该能够将数据分配给数据框中的新列(与extract()相反)。但我不明白语法应该如何运作。

作为一个玩具示例说我已经得到了:

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

我想在magrittr链中将newvalue添加为df的新列。我假设它是这样的:

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

但这并不起作用,大概是因为我不太明白[<-inset()是别名)的语法应该是什么样子。

在magrittr chain之外,我可以做到:

df['new_column_name']  <- newvalue

但我的问题是如何在一个链条中做到这一点,我已经完成了各种各样的操作。

1 个答案:

答案 0 :(得分:6)

以你的例子与我的快速评论:

library(magrittr)

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

newvalue <- rnorm(26)

您需要做的就是:

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

但是,您可以完全跳过magrittr&#39 {s} inset(),因为这样可行:

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

所以:

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