使用dplyr以下命令可以轻松创建新列mutate:
df <- data.frame(v1 = 1:3, v2 = c('a','b','c'))
> mutate(df, newcol = NA)
v1 v2 newcol
1 1 a NA
2 2 b NA
3 3 c NA
Run Code Online (Sandbox Code Playgroud)
我们还可以使用向量创建多个新列mutate_at(如下所示):
> cnames <- c('newcol1', 'newcol2', 'newcol3')
> mutate_at(df, cnames, funs(log(v1)))
v1 v2 newcol1 newcol2 newcol3
1 1 a 0.0000000 0.0000000 0.0000000
2 2 b 0.6931472 0.6931472 0.6931472
3 3 c 1.0986123 1.0986123 1.0986123
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以使用 来将这些新列初始化为 NA dplyr?
例如,mutate_at(df, cnames, funs(v1 * NA))给出了期望的结果,但这似乎是间接的。我想要的是:
mutate_at(df, cnames, funs(. = NA)) # Error: Can't create call to non-callable object
Run Code Online (Sandbox Code Playgroud)
我们不需要知道任何其他列的名称。
(我知道这可以简单地解决df[ , cnames] <- NA,但我正在寻找使用dplyr函数的解决方案)
编辑:
使用dplyr该示例的更高版本将变为:
mutate_at(df, all_of(cnames), funs(log(v1)))
Run Code Online (Sandbox Code Playgroud)
你可以这样做。
library(dplyr)
df %>%
`is.na<-`(cnames)
# v1 v2 newcol1 newcol2 newcol3
#1 1 a NA NA NA
#2 2 b NA NA NA
#3 3 c NA NA NA
Run Code Online (Sandbox Code Playgroud)
我希望一个%>%就够dplyr了。;)
| 归档时间: |
|
| 查看次数: |
2750 次 |
| 最近记录: |