使用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
我们也可以使用向量和 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
有没有一种简单的方法使用 dplyr
将这些新列初始化为 NA?
例如,mutate_at(df, cnames, funs(v1 * NA))
可以得到期望的结果,但似乎有些间接。我想要的是类似于以下方式的内容:
mutate_at(df, cnames, funs(. = NA)) # Error: Can't create call to non-callable object
我们不需要知道其他列的名称。
(我知道可以使用df[ , cnames] <- NA
来简单解决,但我正在寻找一种使用dplyr
函数的解决方案)
编辑:
在使用较新版本的dplyr
时,示例变为:
mutate_at(df, all_of(cnames), funs(log(v1)))
mutate_at(df, cnames, funs( NA * 0))
甚至可以添加“+”。 - akrunnewcol1
不存在。” 显然,向量cnames中的值应该已经存在。您是如何让您的代码工作的?我正在使用dplyr版本0.8.3和R版本3.6.3。 - Adriaan Nering Bögelall_of
。 - C. Braunall_of
,RStudio会发出警告。 - Adriaan Nering Bögel