R 使用带有内部映射的启动\u,而不是显式命名
我想在TIBLE中应用函数,但不想显式命名列。例如R 使用带有内部映射的启动\u,而不是显式命名,r,tidyselect,R,Tidyselect,我想在TIBLE中应用函数,但不想显式命名列。例如 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,
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
我得到一份工作
“错误:未注册tidyselect变量”
非常感谢您的帮助。试试这个:
with_funct2 = test %>% mutate(blub = pmap_chr(test %>% select(starts_with("var")), paste, sep='+'))
希望它有帮助您可以使用select()
内部pmap\u chr()
来处理以“var”开头的列。我使用点来表示mutate()
中使用的数据集
这种方法有效的一个原因是pmap()
在TIBLE中按行工作。按照我的使用方式,列在函数中的使用顺序(在您的例子中是粘贴())是按照它们在数据集中的显示顺序
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
测试%>%
变异(blub=pmap\u chr(选择(,以(“var”)开头),粘贴,sep='+'))
#一个tibble:3x5
var1 var2 var3虚拟blub
1 la-ma-fi 1 la+ma+fi
2乐美法1乐美法
三路木夫一路木夫
这在这里可以正常工作,但是如果在进入此mutate
之前对数据进行了任何分组或修改,那么这将是错误的:它将使用原始(未修改的测试
)数据。最好使用(如aosmith所示)占位符
,因为它将包含管道中此时存在的数据。同意!更灵活您的版本可以工作,但我不能只是将“test”更改为“.”,这会引发错误。
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