R 使用apply族将col1的每一行替换为col2中相应的标记

R 使用apply族将col1的每一行替换为col2中相应的标记,r,R,我觉得这必须是一个超级基本的问题来解决,但我的搜索技能是失败的 df <- data.frame(col1 = c("abc", "def", "ghi"), col2 = c("foo ~xyz~", "~xyz~ bar", "blah ~xyz~ blah")) col1 col2 abc foo ~xyz~ def ~xyz~ bar ghi blah ~xyz~ blah 我可以用for循环来解决这个问题,但我觉得有一种方

我觉得这必须是一个超级基本的问题来解决,但我的搜索技能是失败的

df <- data.frame(col1 = c("abc", "def", "ghi"),
                 col2 = c("foo ~xyz~", "~xyz~ bar", "blah ~xyz~ blah"))
col1   col2
abc    foo ~xyz~
def    ~xyz~ bar
ghi    blah ~xyz~ blah
我可以用for循环来解决这个问题,但我觉得有一种方法可以用vapply或sapply来解决这个问题

我的for循环解决方案如下所示:

for (i in 1:nrow(df)) {
     itemhold <- df$col1[i]
     df$col2[i] <- gsub("~xyz~", itemhold, df$col2[i])
}
任何提示都将不胜感激。如果到目前为止还不明显的话,我对R还是相当陌生的,它是我的第一语言

编辑:我删除了一些关于我用于这些目的的函数的内容,因为当我实际处理我的minrep示例时,我意识到它是不需要的——我在一个特殊情况下使用该函数,而这个情况在这里并不真正相关。

你可以像这样使用apply:

您可以像这样使用apply执行此操作:

可以使用stringr执行此操作,而无需任何循环或应用:

可以使用stringr执行此操作,而无需任何循环或应用:


令人惊叹的我更喜欢这条路线,而不是我希望走的路线。太棒了!我更喜欢这条路线,而不是我希望走的路线。太棒了,谢谢。我需要做更多关于mapply的研究,这一点很难在我的脑海中保持清晰。太棒了,谢谢。我需要做更多关于mapply的研究,我很难在脑海中保持清醒。
for (i in 1:nrow(df)) {
     itemhold <- df$col1[i]
     df$col2[i] <- gsub("~xyz~", itemhold, df$col2[i])
}
df$col2 <- apply(df, 1, 
             function(row) gsub(pattern="~xyz~", replacement=row["col1"], x=row["col2"]))
#   col1          col2
# 1  abc       foo abc
# 2  def       def bar
# 3  ghi blah ghi blah
df$col2 <- mapply(
             function(rep, string) gsub(pattern="~xyz~", replacement=rep, x=string),
             df$col1, df$col2)
#   col1          col2
# 1  abc       foo abc
# 2  def       def bar
# 3  ghi blah ghi blah
df <- data.frame(col1 = c("abc", "def", "ghi"),
                 col2 = c("foo ~xyz~", "~xyz~ bar", "blah ~xyz~ blah"),
                 stringsAsFactors = FALSE)

df$col2_replaced = str_replace(df$col2, "~xyz~", df$col1)
> df
  col1            col2 col2_replaced
1  abc       foo ~xyz~       foo abc
2  def       ~xyz~ bar       def bar
3  ghi blah ~xyz~ blah blah ghi blah