我试图了解如何更好地使用if else
or case_when
在操作向量时在管道中。在抓取网站的元素后,我留下了这个向量:
[1] "66" "121" "112 - 150" "211" "197" "25" "72"
[8] "59" "100" "69 - 194"
c("66", "121", "112 - 150", "211", "197", "25", "72", "59", "100",
"69 - 194")
library(tidyverse)
library(stringr) (1.5.0)
我想在将它们放入数据框/小标题之前在向量中对其进行操作。
如果字符串中有两个数字(例如 112 - 150),则将其替换为两个数字的平均值。我已经尝试过以下方法:
vector %>%
case_when(
str_detect(., "-") ~ . %>%
str_split_1(" - ") %>%
as.numeric() %>%
mean(),
T ~ .
)
这是行不通的。单独而言,它的工作原理是:
"112 - 150" %>%
str_split_1(" - ") %>%
as.numeric() %>%
mean()
[1] 131
然后我想也许case_when()
不适用于向量。但它显然是这样的:
case_when(
vector == "66" ~ "SIXSIX",
TRUE ~ "NOT 66"
)
[1] "SIXSIX" "NOT 66" "NOT 66" "NOT 66" "NOT 66" "NOT 66" "NOT 66" "NOT 66"
[9] "NOT 66" "NOT 66"
我更喜欢没有传统 if 语句的建议:
vector %>%
{if (cond) ** else **}