1

我想在 tibble 中应用一个函数,但我不想明确命名列。例如

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 变量”

我会很感激任何帮助。

4

2 回答 2

2

您可以使用select()insidepmap_chr()来处理以“var”开头的列。我用点来指代mutate().

这样做的一个原因是因为pmap()在 tibble 上按行工作。我使用这种方法的方式是在函数中使用列(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
于 2019-03-27T15:57:22.303 回答
1

尝试这个:

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

希望能帮助到你

于 2019-03-27T15:57:04.173 回答