假设您有以下DataFrame:
DF <- as.data.frame(cbind(c("Aa1","aB1","aA1"),c("A","B","A"),c("D","F","G")))
colnames(DF)[1] <- "State1"
colnames(DF)[2] <- "StringToBeReplaced"
colnames(DF)[3] <- "StringToTakeItsPlace"
哪个应该屈服
State1 StringToBeReplaced StringToTakeItsPlace
1 Aa1 A D
2 aB1 B F
3 aA1 A G
这些名称让我的目标消失了:我想将State1中的字符串替换为“StringToBeReplaced”到“StringToTakeItsPlace”。
有没有办法在所有方面获得类似于State1的新列,除了已经执行了字符串替换?换句话说,期望的输出是
State1 StringToBeReplaced StringToTakeItsPlace State2
1 Aa1 A D Da1
2 aB1 B F aF1
3 aA1 A G aG1
非常感谢!
使用mapply
和gsub
:
transform(DF,
State2 = mapply(gsub, StringToBeReplaced, StringToTakeItsPlace, State1, fixed = TRUE))
赠送:
State1 StringToBeReplaced StringToTakeItsPlace State2
1 Aa1 A D Da1
2 aB1 B F aF1
3 aA1 A G aG1
或者使用dplyr:
library(dplyr)
DF %>%
rowwise() %>%
mutate(State2 = gsub(StringToBeReplaced, StringToTakeItsPlace, State1, fixed = TRUE)) %>%
ungroup
使用stringr
和tidyverse
Library(tidyverse)
DF <- tibble(
State1 = c("Aa1","aB1","aA1"),
StringToBeReplaced = c("A","B","A"),
StringToTakeItsPlace=c("D","F","G")
)
DF %>%
mutate(State2 = str_replace(State1,
StringToBeReplaced,
StringToTakeItsPlace ))
#> # A tibble: 3 x 4
#> State1 StringToBeReplaced StringToTakeItsPlace State2
#> <chr> <chr> <chr> <chr>
#> 1 Aa1 A D Da1
#> 2 aB1 B F aF1
#> 3 aA1 A G aG1
Created on 2018-03-03 by the reprex package (v0.2.0).