Gee*_*eet 2 r stringr dplyr tidyverse
我有一个带有字符变量的数据帧df以及fromvec和tovec.
df <- tibble(var = c("A", "B", "C", "a", "E", "D", "b"))
fromvec <- c("A", "B", "C")
tovec <- c("X", "Y", "Z")
Run Code Online (Sandbox Code Playgroud)
在fromvec中使用字符串,在df中检查它们,然后用tovec中的相应字符串替换它们,以便df中的"A"替换为"X","B"替换为"Y",依此类推以获得desired_df.
desired_df <- tibble(var = c("X", "Y", "Z", "X", "E", "D", "Y"))
Run Code Online (Sandbox Code Playgroud)
我试过跟随,但没有得到预期的结果!
from_vec <- paste(fromvec, collapse="|")
to_vec <- paste(tovec, collapse="|")
undesired_df <- df %>%
mutate(var = str_replace(str_to_upper(var), from_vec, to_vec))
Run Code Online (Sandbox Code Playgroud)
即这个
tibble(var = c("X|Y|Z", "X|Y|Z", "X|Y|Z", "X|Y|Z", "E", "D", "X|Y|Z"))
Run Code Online (Sandbox Code Playgroud)
请帮我拿到desired_df.
你可以使用chartr:
df$var <- chartr(paste(fromvec,collapse=""),
paste(tovec,collapse=""),
toupper(df$var))
# # A tibble: 7 x 1
# var
# <chr>
# 1 X
# 2 Y
# 3 Z
# 4 X
# 5 E
# 6 D
# 7 Y
Run Code Online (Sandbox Code Playgroud)
或者我们可以使用 recode
library(dplyr)
df$var <- recode(toupper(df$var), !!!setNames(tovec,fromvec))
Run Code Online (Sandbox Code Playgroud)
如果你真的想用,str_replace你可以这样做:
library(purrr)
library(stringr)
df$var <- reduce2(fromvec, tovec, str_replace, .init=toupper(df$var))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |