我知道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
但我的问题是如何在一个链条中做到这一点,我已经完成了各种各样的操作。
答案 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)