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