How can I assign multiple column names at once using cbind
?
# works fine
cbind(mtcars, 'new1' = apply(X = array(data = 1:64, dim = c(32, 1)),
MARGIN = c(1,2),
FUN = function(x) {return(x)}))
# works fine
cbind(mtcars, apply(X = array(data = 1:64, dim = c(32, 2)),
MARGIN = c(1,2),
FUN = function(x) {return(x)}))
# doesn't work
cbind(mtcars, c('new2', 'new3') = apply(X = array(data = 1:64, dim = c(32, 2)),
MARGIN = c(1,2),
FUN = function(x) {return(x)}))
CodePudding user response:
Another option is to use setNames
, but you need to first wrap the apply
statement in data.frame
:
cbind(mtcars, setNames(data.frame(apply(X = array(data = 1:64, dim = c(32, 2)),
MARGIN = c(1,2),
FUN = function(x) {return(x)})), c('new2', 'new3')))
Output
mpg cyl disp hp drat wt qsec vs am gear carb new2 new3
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int> <int>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4 1 33
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4 2 34
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 3 35
4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1 4 36
5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 5 37
6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 6 38
7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 7 39
8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 8 40
9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2 9 41
10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4 10 42
# … with 22 more rows
CodePudding user response:
There are multiple options - update the original data by assignment
mtcars[c("new", "new3")] <- apply(X = array(data = 1:64, dim = c(32, 2)), MARGIN = c(1,2), FUN = function(x) {return(x)})
Or another option is to cbind
with dimnames
found in array
cbind(mtcars, apply(X = array(data = 1:64, dim = c(32, 2), dimnames = list(NULL, c('new2', 'new3'))), MARGIN = c(1,2), FUN = function(x) {return(x)}))
Or could also do
do.call(cbind, list(mtcars, new=apply(X = array(data = 1:64, dim = c(32, 2)),
MARGIN = c(1,2),
FUN = function(x) {return(x)})))
or with
`[<-`(mtcars, c('new2', 'new3'), value = apply(X = array(data = 1:64, dim = c(32, 2)),
MARGIN = c(1,2),
FUN = function(x) {return(x)}))