重命名一个矩阵列,它与dplyr没有初始名称

时间:2018-01-10 13:40:46

标签: r dplyr

我正在尝试重命名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

我通常使用rename来表示rename(new_name=old_name),但是因为没有old_name它不起作用。我试过了:

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"))

这些都不起作用。

我知道基本的R方式(colnames(obj) <- c("v1","v2")),但我特意寻找dplyr方法来做到这一点。

2 个答案:

答案 0 :(得分:2)

要使用rename,您需要拥有某种列表(如数据框或tibble)。所以你可以做两件事。您可以转换为tibble并使用rename或使用colnames并保持结构不变,即

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"

答案 1 :(得分:1)

这个magrittr

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