案例当RKE中的LIKE等价时

时间:2017-12-21 21:40:28

标签: r if-statement dplyr case-when

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

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

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

在SQL中(例如,当Letter_Test LIKE'%Alpha%'那么Alpha else''Letter-Test'结束时)。

4 个答案:

答案 0 :(得分: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"  

Test为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 :(得分:1)

使用case_when() 和%喜欢%谓词。

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

答案 2 :(得分:0)

一个选项:

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

另一种选择:

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

答案 3 :(得分:0)

如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