使用tribble()构建tibble时如何按行将一列的值传递到另一列?
解决方案
问题原因
你原来的写法无法实现预期效果,是因为tribble按行录入数据时,~tolower(var)里的var会被直接识别为未求值的符号存入公式,不会自动替换为同行列的取值。
实现方法
方法1:直接在tribble中手动注入值
如果你的数据量小,可以直接用rlang的表达式注入语法,把对应的值直接写到公式里:
library(tibble) library(rlang) my_trib <- tribble( ~var, ~my_func, "ABC", ~tolower(!!"ABC"), "abc", ~toupper(!!"abc") )
输出的my_trib$my_func就会是你期望的结果:
[[1]] ~tolower("ABC") [[2]] ~toupper("abc")
方法2:批量生成避免重复输入
如果不想手动重复写var的取值,可以先录入基础信息,再按行批量生成公式列:
library(tibble) library(dplyr) library(rlang) my_trib <- tribble( ~var, ~func_name, "ABC", "tolower", "abc", "toupper" ) %>% rowwise() %>% mutate( # 按行把var的值和函数名注入公式 my_func = list(~ (!!sym(func_name))(!!var)) ) %>% ungroup() %>% select(-func_name)
这个方法适合数据行数多的场景,不需要手动逐个修改公式内容。
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

