dplyr Переименовать столбец, используя другое имя столбца в качестве ссылки - PullRequest
0 голосов
/ 08 мая 2020
df <- tibble(material = c(1:10)
       ,x2 = c(letters[1:10]))

# A tibble: 10 x 2
   material x2   
      <int> <chr>
 1        1 a    
 2        2 b    
 3        3 c    
 4        4 d    
 5        5 e    
 6        6 f    
 7        7 g    
 8        8 h    
 9        9 i    
10       10 j


colnames(df)[2] <- paste0('text_',colnames(df)[1])                     
colnames(df)[1] <- paste0('key_',colnames(df)[1])

# A tibble: 10 x 2
   key_material text_material
          <int> <chr>        
 1            1 a            
 2            2 b            
 3            3 c            
 4            4 d            
 5            5 e            
 6            6 f            
 7            7 g            
 8            8 h            
 9            9 i            
10           10 j 

Я пытаюсь переименовать второй столбец (x2) на основе исходного имени первого столбца (материала). Первый столбец будет переименован в «key_material», а второй столбец будет переименован в «text_material».

Я хочу превратить вышеперечисленные шаги в %>% поток.

Ниже моей попытки

df %>% rename( paste0('text_', colnames(.)[1]) = 2
                     ,paste0('key_', colnames(.)[1]) = 1)

Хотя кажется, что это выражение не будет оценивать.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 08 мая 2020

Вы можете использовать rename_all, если у вас всего 2 столбца.

library(dplyr)
df %>% rename_all(~paste(c('key', 'text'), .[1], sep = "_"))

# A tibble: 10 x 2
#   key_material text_material
#          <int> <chr>        
# 1            1 a            
# 2            2 b            
# 3            3 c            
# 4            4 d            
# 5            5 e            
# 6            6 f            
# 7            7 g            
# 8            8 h            
# 9            9 i            
#10           10 j          

Или rename_at, если у вас больше столбцов, но вы хотите переименовать только первые 2.

df %>% rename_at(1:2, ~paste(c('key', 'text'), .[1], sep = "_"))
2 голосов
/ 08 мая 2020

вы можете попробовать

df  %>% set_names(paste0(c("key_","text_"), names(.)[1]))

если более двух столбцов вы можете сделать

df %>% set_names(c(paste0(c("key_","text_"), names(.)[1]), names(.)[-1:-2]))
...