数据帧字符串在自定义函数中搜索

问题描述 投票:1回答:1

我正在尝试编写一个函数来搜索数据框中的给定字符串。例如:

# Set up
library(tidyverse)
options(stringsAsFactors= F)

color <- c('black', 'black', 'blue', 'blue', 'yellow')
vehicle <- c('truck', 'truck', 'car', 'car', 'bike')
plant <- c('tree', 'flower', 'grass', 'tree', 'flower')
height <- c('tall', 'medium', 'short', 'tall', 'medium')

testdf <- as.data.frame(cbind(color, vehicle, plant, height))

创建一个函数来搜索任何行中具有值卡车的任何变量:

search.func <- function(df) {
  names(df %>%
    select_if(is.character) %>%
    select_if(grepl('truck', .)))
}

search.func(testdf)  # returns the correct result - 'vehicle' 

为了使函数更灵活,并能够传递任何字符串,我尝试过:

search.func2 <- function(df, string) {

  string <- enquo(string)

  names(df %>%
          select_if(is.character) %>%
          select_if(grepl(string, .)))
  }

search.func2(testdf, truck)  # errors out

但我没有正确使用enquo - 我需要grepl函数中的引号,而且我无法告诉R如何做到这一点。任何帮助表示赞赏!谢谢!

r string dataframe search
1个回答
0
投票

添加quo_name后,你应该没事。

search.func2 <- function(df, string) {

  string <- enquo(string)
  string <- quo_name(string)
  names(df %>%
          select_if(is.character) %>%
          select_if(grepl(string, .)))
}

#search.func2(testdf, truck)
#[1] "vehicle"
© www.soinside.com 2019 - 2024. All rights reserved.