Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于包含多个字符串的向量选择数据帧的行_R_String_Grepl - Fatal编程技术网

R 基于包含多个字符串的向量选择数据帧的行

R 基于包含多个字符串的向量选择数据帧的行,r,string,grepl,R,String,Grepl,我有一个单词向量,我需要用它来选择数据框中的几行,其中包含1000多个观察值。我将在下面放一个简单的例子 这些是我必须在数据框中寻找的食物:ls_foods这里是我的答案,检查我是否使用一行代码来转换非特殊字符中的特殊字符,在那里你必须指定特殊字符的显示方式 id <- (1:5) variables <- c("abacate - kg", "batata inglesa - Kg", "Pera - pés",

我有一个单词向量,我需要用它来选择数据框中的几行,其中包含1000多个观察值。我将在下面放一个简单的例子


这些是我必须在数据框中寻找的食物:
ls_foods这里是我的答案,检查我是否使用一行代码来转换非特殊字符中的特殊字符,在那里你必须指定特殊字符的显示方式

id <- (1:5)
variables <- c("abacate - kg", "batata inglesa - Kg", "Pera - pés", 
               "Brocolis - Kg", "Laranja (Lima, Pêra, da Terra, etc) - Pés")
df <- data.frame(id, variables)


ls_foods <- c("Abacate", "Abacaxi",  "Abóbora", "Abobrinha", "Acelga",  
              "Acerola", "Alface", "Almeirão", "Arroz", "Banana", "Batata", 
              "Batata doce", "Berinjela","Brocolis","Cacau", "Café")

# Convert special characters with chartr
answer <- unlist(sapply(chartr(old = "áéíóúàèìòù", new = "aeiouaeiou", x = tolower(ls_foods)), 
                 grep, x = tolower(variables)))

id这里是我的答案,请检查我是否使用一行代码将特殊字符转换为非特殊字符,在这里您必须指定特殊字符的显示方式

id <- (1:5)
variables <- c("abacate - kg", "batata inglesa - Kg", "Pera - pés", 
               "Brocolis - Kg", "Laranja (Lima, Pêra, da Terra, etc) - Pés")
df <- data.frame(id, variables)


ls_foods <- c("Abacate", "Abacaxi",  "Abóbora", "Abobrinha", "Acelga",  
              "Acerola", "Alface", "Almeirão", "Arroz", "Banana", "Batata", 
              "Batata doce", "Berinjela","Brocolis","Cacau", "Café")

# Convert special characters with chartr
answer <- unlist(sapply(chartr(old = "áéíóúàèìòù", new = "aeiouaeiou", x = tolower(ls_foods)), 
                 grep, x = tolower(variables)))

id尝试
subset
+
grepl
如下

subset(
  df,
  grepl(
    paste0(ls_foods, collapse = "|"),
    variables,
    ignore.case = TRUE
  )
)

  id           variables
1  1        abacate - kg
2  2 batata inglesa - Kg
4  4       Brocolis - Kg

试试下面的
subset
+
grepl

subset(
  df,
  grepl(
    paste0(ls_foods, collapse = "|"),
    variables,
    ignore.case = TRUE
  )
)

  id           variables
1  1        abacate - kg
2  2 batata inglesa - Kg
4  4       Brocolis - Kg

通常,在处理重音字符时,如果重音不被视为有意义的,我会将所有内容简化为拉丁ASCII。
stringi
包对此很方便

library(stringi)

simplify <- function(x) stri_trans_general(x, "Latin-ASCII; Lower"))

df[
  stri_detect_regex(
    simplify(df$variables),
    paste(simplify(ls_foods), collapse = "|")
  ),
]
库(stringi)

简化通常在处理重音字符时,如果重音不被视为有意义,我会将所有内容简化为拉丁ASCII。
stringi
包对此很方便

library(stringi)

simplify <- function(x) stri_trans_general(x, "Latin-ASCII; Lower"))

df[
  stri_detect_regex(
    simplify(df$variables),
    paste(simplify(ls_foods), collapse = "|")
  ),
]
库(stringi)

简化你的问题不是很清楚,但也许你想要
est_1km[est_1km$desc_var%in%ls_alimento,]
。我也试过了。也许我可以尝试一个´´´´´´循环`´´,但我不是很擅长。在你编辑之后,问题就更清楚了。事实上,我的评论不是正确的。你可以试试这个,
grepl(paste0(ls_foods,collapse=“|”)df$desc_var)
如果你不在数据框的
[
中加逗号,它将默认为列。你想要行。因此,如果你的问题不是很清楚,那么你可能想要
est_1km[est_1km$desc var%ls_alimento,]
。我也尝试过。也许我可以尝试一个´´´´´循环`´´´,但我不是很擅长。编辑后问题更清楚了。事实上,我的评论不是正确的方式。如果你不在
中加逗号,你可以尝试这个,
grepl(粘贴0(ls_foods,collapse=“|”)df$desc var)
[
对于数据帧,它将默认为列。您需要行。因此请尝试
df