案例当RKE中的LIKE等价时

问题描述 投票:0回答:3

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

Alpha - 测试,Beta测试,Zeta测试,Alpha-Two,Beta-Two

我想写一个声明,基本上说数据是否像Alpha那样'Alpha',否则返回列结果。

在SQL中(例如,当Letter_Test LIKE'%Alpha%'那么Alpha else'字母测试'结束时)。

r if-statement dplyr case-when
3个回答
1
投票

实际上不确定我是否正确的问题,但如果你的意思是你想测试“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,如果在Letter.Test列中找到单词,则grepl返回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

1
投票

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

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

0
投票

一种选择:

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

另外一个选项:

new_thing2 <- gsub(".*(Alpha).*", "\\1", df$Letter_Test)
© www.soinside.com 2019 - 2024. All rights reserved.