使用与 r 中单词的一部分相关的条件
Using a condition related to a part of word in r
我有一个这样的数据框:
1 2
aquiles_alcatra_Mat_15 picanha
aquiles_alcatra_Mat_15 picanha
alcatra_Mat_15 picanha
alcatra_Mat_20 picanha
alcatra_Mat_25 picanha
picanha_Mat_20 picanha
picanha_Mat_25 picanha
我想这样做:
1 2
aquiles_alcatra_Mat_15 alcatra
aquiles_alcatra_Mat_15 alcatra
alcatra_Mat_15 alcatra
alcatra_Mat_20 alcatra
alcatra_Mat_25 alcatra
picanha_Mat_20 picanha
picanha_Mat_25 picanha
如果我在 column 1
上有 alcatra
作为单词的一部分,我只想在 column 2
上使用 alcatra
。
我知道我可以使用这个:
file[ file == 'aquiles_alcatra_Mat_15'] <- 'alcatra'
但是我有几种情况差不多300。我试过这样的事情:
file[ file == '.*alcatra*'] <- 'alcatra'
但是没用。
可能的解决方案,基于 dplyr
和 stringr::str_detect
:
library(tidyverse)
df %>%
mutate(V2 = if_else(str_detect(V1, "alcatra"), "alcatra", V2))
#> V1 V2
#> 1 aquiles_alcatra_Mat_15 alcatra
#> 2 aquiles_alcatra_Mat_15 alcatra
#> 3 alcatra_Mat_15 alcatra
#> 4 alcatra_Mat_20 alcatra
#> 5 alcatra_Mat_25 alcatra
#> 6 picanha_Mat_20 picanha
#> 7 picanha_Mat_25 picanha
您可以使用以下代码:
library(dplyr)
df %>%
mutate(v2 = case_when(grepl("alcatra", v1) ~ "alcatra",
grepl("picanha", v1) ~ "picanha"))
输出:
v1 v2
1 aquiles_alcatra_Mat_15 alcatra
2 aquiles_alcatra_Mat_15 alcatra
3 alcatra_Mat_15 alcatra
4 alcatra_Mat_20 alcatra
5 alcatra_Mat_25 alcatra
6 picanha_Mat_20 picanha
7 picanha_Mat_25 picanha
数据
df <- data.frame(v1 = c("aquiles_alcatra_Mat_15", "aquiles_alcatra_Mat_15", "alcatra_Mat_15", "alcatra_Mat_20", "alcatra_Mat_25", "picanha_Mat_20", "picanha_Mat_25"),
v2 = c("picanha", "picanha", "picanha", "picanha", "picanha", "picanha", "picanha"))
我有一个这样的数据框:
1 2
aquiles_alcatra_Mat_15 picanha
aquiles_alcatra_Mat_15 picanha
alcatra_Mat_15 picanha
alcatra_Mat_20 picanha
alcatra_Mat_25 picanha
picanha_Mat_20 picanha
picanha_Mat_25 picanha
我想这样做:
1 2
aquiles_alcatra_Mat_15 alcatra
aquiles_alcatra_Mat_15 alcatra
alcatra_Mat_15 alcatra
alcatra_Mat_20 alcatra
alcatra_Mat_25 alcatra
picanha_Mat_20 picanha
picanha_Mat_25 picanha
如果我在 column 1
上有 alcatra
作为单词的一部分,我只想在 column 2
上使用 alcatra
。
我知道我可以使用这个:
file[ file == 'aquiles_alcatra_Mat_15'] <- 'alcatra'
但是我有几种情况差不多300。我试过这样的事情:
file[ file == '.*alcatra*'] <- 'alcatra'
但是没用。
可能的解决方案,基于 dplyr
和 stringr::str_detect
:
library(tidyverse)
df %>%
mutate(V2 = if_else(str_detect(V1, "alcatra"), "alcatra", V2))
#> V1 V2
#> 1 aquiles_alcatra_Mat_15 alcatra
#> 2 aquiles_alcatra_Mat_15 alcatra
#> 3 alcatra_Mat_15 alcatra
#> 4 alcatra_Mat_20 alcatra
#> 5 alcatra_Mat_25 alcatra
#> 6 picanha_Mat_20 picanha
#> 7 picanha_Mat_25 picanha
您可以使用以下代码:
library(dplyr)
df %>%
mutate(v2 = case_when(grepl("alcatra", v1) ~ "alcatra",
grepl("picanha", v1) ~ "picanha"))
输出:
v1 v2
1 aquiles_alcatra_Mat_15 alcatra
2 aquiles_alcatra_Mat_15 alcatra
3 alcatra_Mat_15 alcatra
4 alcatra_Mat_20 alcatra
5 alcatra_Mat_25 alcatra
6 picanha_Mat_20 picanha
7 picanha_Mat_25 picanha
数据
df <- data.frame(v1 = c("aquiles_alcatra_Mat_15", "aquiles_alcatra_Mat_15", "alcatra_Mat_15", "alcatra_Mat_20", "alcatra_Mat_25", "picanha_Mat_20", "picanha_Mat_25"),
v2 = c("picanha", "picanha", "picanha", "picanha", "picanha", "picanha", "picanha"))