我想在r中使用ifelse语句对变量进行类似的case语句。例如,假设我在以下数据框中有以下列向量'Letter_Test':
Alpha - 测试,Beta测试,Zeta测试,Alpha-Two,Beta-Two
我想写一个声明,基本上说数据是否像Alpha那样'Alpha',否则返回列结果。
在SQL中(例如,当Letter_Test LIKE'%Alpha%'那么Alpha else'字母测试'结束时)。
实际上不确定我是否正确的问题,但如果你的意思是你想测试“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
使用case_when()和%like%谓词。
case_when(
species %like% "Alpha" ~ "Alpha",
TRUE ~ "Alpha"
)
一种选择:
new_thing <- ifelse("Alpha" %in% df$Letter_Test, "Alpha", "Letter-Test")
另外一个选项:
new_thing2 <- gsub(".*(Alpha).*", "\\1", df$Letter_Test)