在地图内部使用starts_with而不是明确命名

时间:2019-03-27 15:49:04

标签: r tidyselect

我想在小标题中应用一个函数,但是我不想显式命名列。例如

library(tidyverse)
library(tidyselect)
test = tibble(var1 = c("la", "le", "lu"), var2 = c("ma", "me", "mu"), var3 = c("fi", "fa", "fu"), dummy=1)
with_funct = test %>% mutate(blub = pmap_chr(list(var1, var2, var3), paste, sep='+'))

我得到了预期的结果:

# A tibble: 3 x 5
  var1  var2  var3  dummy blub    
  <chr> <chr> <chr> <dbl> <chr>   
  1 la    ma    fi        1 la+ma+fi
  2 le    me    fa        1 le+me+fa
  3 lu    mu    fu        1 lu+mu+fu

但是我宁愿使用list(var1, var2, var3)也不写starts_with("var"),但这行不通。

所以,如果我使用

with_funct = test %>% mutate(blub = pmap_chr(starts_with("var"), paste, sep='+'))

我得到

  

“错误:没有注册tidyselect变量”

我将不胜感激。

2 个答案:

答案 0 :(得分:2)

尝试一下:

with_funct2 = test %>% mutate(blub = pmap_chr(test %>% select(starts_with("var")), paste, sep='+'))

希望有帮助

答案 1 :(得分:1)

您可以在select()内使用pmap_chr()来处理以“ var”开头的列。我用点表示mutate()中使用的数据集。

之所以起作用的原因之一是因为pmap()在整个小标题上按行工作。我的使用方式是按功能(在您的情况下为paste())按其在数据集中显示的顺序使用这些列。

test %>% 
    mutate(blub = pmap_chr(select(., starts_with("var")), paste, sep='+'))

# A tibble: 3 x 5
  var1  var2  var3  dummy blub    
  <chr> <chr> <chr> <dbl> <chr>   
1 la    ma    fi        1 la+ma+fi
2 le    me    fa        1 le+me+fa
3 lu    mu    fu        1 lu+mu+fu