首页 > 解决方案 > 使用 dplyr 使用不同列的值向列名添加前缀

问题描述

“为列名添加前缀”有一个线程,但解决方案仅限于添加固定字符串作为前缀或后缀。是否可以将另一列的值作为前缀添加到列名?

例如,我有一个名为 的列sum,另一个名为 、 和的列,具体取决于数据框time_period。我希望像动态地创建新列。一个解决方案将是理想的,但不是必需的。yearmonthyear_summonth_sumdplyr

已经尝试过以下线程和相关线程: Add a prefix to column names

df <- tibble(sum = c(150, 175, 200), time_period = c('year', 'year', 'year')) %>%
        rename_at(vars(sum), function(x) paste0(time_period, x)) %>%
        glimpse()

我收到以下错误:

paste0(time_period,x)中的错误:找不到对象'time_period'

我期待该列sum重命名为year_sum.

标签: rdataframedplyr

解决方案


这是一个解决方法。它只查看第一行time_period并获取它在那里找到的任何值:

df %>% {rename_at(., vars(sum), function(x) paste(pull(., time_period)[1], x, sep = "_"))}

# A tibble: 3 x 2
  year_sum time_period
     <dbl> <chr>      
1      150 year       
2      175 year       
3      200 year 

推荐阅读