7

我知道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 链之外,我可以这样做:

df['new_column_name']  <- newvalue

但我的问题是如何在一个链条中做到这一点,我已经做过各种杂乱无章的操作。

4

1 回答 1

8

以你的例子和我的快速评论为例:

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'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)
于 2015-08-20T17:08:14.477 回答