Case When LIKE 等效于 R

Case When LIKE equivalent in R

我想使用 ifelse 语句对变量执行类似于 r 中的 case 语句。例如,假设我在数据框中有以下列向量 'Letter_Test':

Alpha-测试、Beta-测试、Zeta-测试、Alpha-2、Beta-2

我想写一个声明,基本上说如果数据像 Alpha 那么 'Alpha',否则 return 列结果。

在 SQL 中会是(CASE WHEN Letter_Test LIKE '%Alpha%' THEN Alpha else 'Letter-Test' end)。

一个选项:

new_thing <- ifelse("Alpha" %in%  df$Letter_Test, "Alpha", "Letter-Test")

另一个选项:

new_thing2 <- gsub(".*(Alpha).*", "\1", df$Letter_Test)

实际上不确定我是否答对了问题,但如果你的意思是你想测试 "Alpha" 是否在 Letter-Test 列中,那么这个可行:

    > df <- data.frame("Letter-Test" = c("Alpha - Test", "Beta- Test", "Zeta-Test", "Alpha-Two", "Beta-Two"),
+                  stringsAsFactors = FALSE)
> 
> ifelse(test = grepl("Alpha", df$Letter.Test), yes = "Alpha", no = df$Letter.Test)
[1] "Alpha"      "Beta- Test" "Zeta-Test"  "Alpha"      "Beta-Two"  

测试采用 TRUE 和 FALSE,grepl returns 如果在列 Letter.Test.

中找到该词则为 TRUE

或者您可以将结果直接放入数据框中的新列中:

> df$AplhaTest <- ifelse(test = grepl("Alpha", df$Letter.Test), yes = "Alpha", no = df$Letter.Test)
> df
   Letter.Test  AplhaTest
1 Alpha - Test      Alpha
2   Beta- Test Beta- Test
3    Zeta-Test  Zeta-Test
4    Alpha-Two      Alpha
5     Beta-Two   Beta-Two

使用 case_when() 和 %like% 谓词。

case_when(
      species %like% "Alpha"        ~ "Alpha",
      TRUE                      ~  "Alpha"
    )

正如 Rahim 发布的那样: 使用 case_when() 和 %like% 谓词。

case_when(
      species %like% "Alpha"    ~ "Alpha",
      TRUE                      ~  "Beta"
    )

我想补充一下 JD Longs 的评论(我不允许评论): %like% 似乎来自 DescTools 包 https://www.rdocumentation.org/packages/DescTools/versions/0.99.30/topics/%25like%25