Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将dataframe的一列中的子字符串替换为同一行中另一列的值_R - Fatal编程技术网

将dataframe的一列中的子字符串替换为同一行中另一列的值

将dataframe的一列中的子字符串替换为同一行中另一列的值,r,R,我有一个名为new_sgs的字符列数据框,如下所示: SG.Name RegionCode 1 AW02PASGA001 01 2 AW02PASGA002 01 3 AW02PASGA003 01 4 AW02PASGA004 01 5 AW02PASGA005 01 6 AW02PASGA006 01 ... 我想用第2列中的字符串替换第1列字符串中的“02”。这将完成第1行的工作:

我有一个名为new_sgs的字符列数据框,如下所示:

     SG.Name RegionCode
1 AW02PASGA001         01
2 AW02PASGA002         01
3 AW02PASGA003         01
4 AW02PASGA004         01
5 AW02PASGA005         01
6 AW02PASGA006         01
...
我想用第2列中的字符串替换第1列字符串中的“02”。这将完成第1行的工作:

new_sgs$SG.Name[1] <- gsub("AW02", paste0("AW", new_sgs$RegionCode[1]), new_sgs$SG.Name[1])
但我得到的是:

    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
谢谢


Luke

如果保证要替换的字符串位于名称的3和4位置,则可以使用substr:


如果保证要替换的字符串位于名称的3和4位置,则可以使用substr:

stringr包中的str_replace将在模式上矢量化,并根据需要进行替换。见下例:

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"
stringr包中的str_replace将在模式上矢量化,并根据需要进行替换。见下例:

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"

可能重复的可能重复的感谢!对于简单向量解决方案和帮助我了解mapply的使用,我给予了额外的奖励。注意:我必须在子函数中颠倒nam和rc的顺序才能使其正常工作。谢谢!对于简单向量解决方案和帮助我了解mapply的使用,我给予了额外的奖励。注意:我必须在子函数中颠倒nam和rc的顺序才能使其正常工作。
df$SG.Name = mapply(function(rc, nam) sub("\\d+", nam, rc), df$RegionCode, df$SG.Name, USE.NAMES = F)
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"