vickkk 比如: data <- as_tibble(iris) name <- "Sepal.Length" #我想用data$name选择第一列 data$name #或者是筛选行 filter(data,name>5) 两者都会有报错,出现使用变量代替列名是因为在写shiny,列名是其他Input传递进来的
tctcab vickkk 试试 filter(data, {{ name }} > 5) 这个涉及到用环境变量调用data.frame里的列变量,也就是所谓的“non-standard evaluation”或者 "tidy evaluation"或者其他tidyverse发明的新名词。目前似乎提倡用的是两个花括号,之前更复杂的语法我忘了。 读读下面的链接吧 https://dplyr.tidyverse.org/articles/programming.html 另外顺便问问有没有小伙伴知道data.table怎么处理这个问题?
Jiena vickkk 也可以用这种方法: iris %>% dplyr::filter(!!as.symbol("Sepal.Length") > 5) tctcab frankzhang21 我把工作中常用的 data.table功能写了个包 dtverse(包名略霸气,轻拍轻拍): https://github.com/jienagu/dtverse 可以用这: # devtools::install_github("jienagu/dtverse") library(dtverse) library(data.table) dtverse::filter_all_at(data.table(iris), operator = "g", 5, c("Sepal.Length"))