字符串替换,其中旧字符串和新字符串在列中

问题描述 投票:0回答:2

假设您有以下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

非常感谢!

r string replace
2个回答
1
投票

使用mapplygsub

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

1
投票

使用stringrtidyverse

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).
© www.soinside.com 2019 - 2024. All rights reserved.