R mutate & gsub 其中模式基于列
R mutate & gsub where pattern is based on a column
我正在尝试使用 mutate()
和 gsub()
从 var_1
中删除 pattern
。
由于gsub()
只需要一个字符串,所以我必须在mutate()
之前使用rowwise()
。否则它只会使用 pattern
列中的第一条记录。
我想知道是否有任何其他方法可以在不使用 rowwise()
的情况下获得相同的结果,因为它会大大减慢过程。
test <- data.frame(
var_1 = c('1AB', '2AB', '3C')
,pattern = c('AB','A','C')
)
test %>%
dplyr::rowwise() %>%
dplyr::mutate( result = sub(pattern, '', var_1)
)
想要的结果:
# A tibble: 3 x 4
# Rowwise:
var_1 var_2 pattern result
<chr> <lgl> <chr> <chr>
1 1AB FALSE AB 1
2 2AB TRUE A 2B
3 3C FALSE C 3
您可以使用矢量化的 stringr
选项。
使用str_remove
:
library(dplyr)
library(stringr)
test %>% mutate(result = str_remove(var_1, pattern))
# var_1 pattern result
#1 1AB AB 1
#2 2AB A 2B
#3 3C C 3
这与使用 str_replace
替换为 ""
相同。
test %>% mutate(result = str_replace(var_1, pattern, ''))
我们可以使用map2
library(dplyr)
library(purrr)
test %>%
mutate(result = map2_chr(var_1, pattern, ~ sub(.y, '', .x)))
我正在尝试使用 mutate()
和 gsub()
从 var_1
中删除 pattern
。
由于gsub()
只需要一个字符串,所以我必须在mutate()
之前使用rowwise()
。否则它只会使用 pattern
列中的第一条记录。
我想知道是否有任何其他方法可以在不使用 rowwise()
的情况下获得相同的结果,因为它会大大减慢过程。
test <- data.frame(
var_1 = c('1AB', '2AB', '3C')
,pattern = c('AB','A','C')
)
test %>%
dplyr::rowwise() %>%
dplyr::mutate( result = sub(pattern, '', var_1)
)
想要的结果:
# A tibble: 3 x 4
# Rowwise:
var_1 var_2 pattern result
<chr> <lgl> <chr> <chr>
1 1AB FALSE AB 1
2 2AB TRUE A 2B
3 3C FALSE C 3
您可以使用矢量化的 stringr
选项。
使用str_remove
:
library(dplyr)
library(stringr)
test %>% mutate(result = str_remove(var_1, pattern))
# var_1 pattern result
#1 1AB AB 1
#2 2AB A 2B
#3 3C C 3
这与使用 str_replace
替换为 ""
相同。
test %>% mutate(result = str_replace(var_1, pattern, ''))
我们可以使用map2
library(dplyr)
library(purrr)
test %>%
mutate(result = map2_chr(var_1, pattern, ~ sub(.y, '', .x)))