Bastien
Bastien

Reputation: 3098

rename a matrix column which as no initial names with dplyr

I'm trying to rename the columns of a matrix that has no names in dplyr :

set.seed(1234)
v1 <- table(round(runif(50,0,10)))
v2 <- table(round(runif(50,0,10)))

library(dplyr)
bind_rows(v1,v2) %>% 
  t 
   [,1] [,2]
0     3    4
1     1    9
2     8    6
3    11    7
5     7    8
6     7    1
7     3    4
8     6    3
9     3    6
10    1   NA
4    NA    2

I usually use rename for that with the form rename(new_name=old_name) however because there is no old_name it doesn't work. I've tried:

rename("v1","v2")
rename(c("v1","v2")
rename(v1=1, v2=2)
rename(v1=[,1],v2=[,v2])
rename(v1="[,1]",v2="[,v2]")
rename_(.dots = c("v1","v2"))
setNames(c("v1","v2"))

none of these works.

I know the base R way to do it (colnames(obj) <- c("v1","v2")) but I'm specifically looking for a dplyrway to do it.

Upvotes: 2

Views: 2319

Answers (2)

Sotos
Sotos

Reputation: 51592

In order to use rename you need to have some sort of a list (like a data frame or a tibble). So you can do two things. You either convert to tibble and use rename or use colnames and leave the structure as is, i.e.

new_d <- bind_rows(v1,v2) %>% 
  t() %>% 
  as.tibble() %>% 
  rename('A' = 'V1',  'B' = 'V2')

#where
str(new_d)
#Classes ‘tbl_df’, ‘tbl’ and 'data.frame':  11 obs. of  2 variables:
# $ A: int  3 1 8 11 7 7 3 6 3 1 ...
# $ B: int  4 9 6 7 8 1 4 3 6 NA ...

Or

new_d1 <- bind_rows(v1,v2) %>% 
  t() %>% 
  `colnames<-`(c('A', 'B')) 

#where

str(new_d1)
# int [1:11, 1:2] 3 1 8 11 7 7 3 6 3 1 ...
# - attr(*, "dimnames")=List of 2
#  ..$ : chr [1:11] "0" "1" "2" "3" ...
#  ..$ : chr [1:2] "A" "B"

Upvotes: 2

jyjek
jyjek

Reputation: 2707

This one with magrittr:

library(dplyr)
bind_rows(v1,v2) %>% 
  t %>%
  magrittr::set_colnames(c("new1", "new2"))

Upvotes: 2

Related Questions