2016-09-08 16 views
0

私はこのようになりますnew_sgsという名前の文字列のデータフレームを持ってからの値でデータフレームの1列内の部分文字列を置き換えます。私は列の文字列に「02」を置き換えたい同じ行の別の列

 SG.Name RegionCode 
1 AW02PASGA001   01 
2 AW02PASGA002   01 
3 AW02PASGA003   01 
4 AW02PASGA004   01 
5 AW02PASGA005   01 
6 AW02PASGA006   01 
... 

1を列2の文字列で置き換えます。これは、行1のために仕事をしていません:

new_sgs$SG.Name[1] <- gsub("AW02", paste0("AW", new_sgs$RegionCode[1]), new_sgs$SG.Name[1]) 

が適用されます関数のいずれかを使用して、すべての行にこの変更をする方法はありますか?私は

sapply(new_sgs, function(x) gsub("AW02", paste0("AW", new_sgs$RegionCode[x]), new_sgs$SG.Name[x])) 

を試してみたが、これは私が得るものです:

SG.Name RegionCode 
[1,] NA  NA   
[2,] NA  NA   
[3,] NA  NA   
[4,] NA  NA   
[5,] NA  NA   
[6,] NA  NA 
... 
Warning messages: 
1: In gsub("AW02", paste0("AW", test$RegionCode[x]), test$SG.Name[x]) : 
    argument 'replacement' has length > 1 and only the first element will be used 
2: In gsub("AW02", paste0("AW", test$RegionCode[x]), test$SG.Name[x]) : 
    argument 'replacement' has length > 1 and only the first element will be used 

ありがとう!

ルーク

+1

の可能な重複[R:GSUB、パターン=ベクトルと交換=ベクトル(http://stackoverflow.com/questions/19424709/r-gsub-pattern-vector-and-replacement以下の例を参照-vector) – aosmith

答えて

2

置き換えたい文字列が名前の3と4の位置にくることが保証されている場合は、あなただけのsubstrを使用することができます。

substr(df$SG.Name, 3, 4) <- df$RegionCode 
df 
#  SG.Name RegionCode 
#1 AW01PASGA001   01 
#2 AW01PASGA002   01 
#3 AW01PASGA003   01 
#4 AW01PASGA004   01 
#5 AW01PASGA005   01 
#6 AW01PASGA006   01 

またあなたとsubを使用することができますmapply

df$SG.Name = mapply(function(rc, nam) sub("\\d+", nam, rc), df$RegionCode, df$SG.Name, USE.NAMES = F) 
+0

ありがとう!私はシンプルなベクターソリューションと、mapplyの使い方を理解する手助けをするために余分なクレジットを得ました。注意:サブ関数のnamとrcの順序を逆にして、正しく機能させる必要がありました。 – Luke

2

str_replace() stringrパッケージからは、パターン上vectoriseれ、必要に応じて交換してください。

library(stringr) 

x <- data.frame(
    SG.Name = c("AW02PASGA001", "AW02PASGA002", "AW02PASGA003"), 
    RegionCode = c("01", "01", "01") 
) 

str_replace(x$SG.Name, "02", x$RegionCode) 
#> [1] "AW01PASGA001" "AW01PASGA002" "AW01PASGA003" 
+0

ありがとう、クリアでシンプルなソリューション! – Luke

関連する問題