我已经看到了这两个方面的许多可重复的示例,但无法完全弄清楚如何将概念应用于实际数据!
我有一个包含 2 个多列的数据框,但感兴趣的 2 个是 NGR 和 Buffer,所以这里是该数据的示例
df <- data.frame(
NGR = c("SD93950023","SD9501","SD954012"),
name = c("jk", "rho", "hb"),
Buffer = c(0,500,0))
df
我想在 NGR 的字符串中添加字符,但是仅适用于特定行。所以,我想将SD9501更改为SD955015。现在,数据帧有 1300 行,所以我希望将其复制到缓冲区值为 500 的所有行,因为它们都具有相同的 NGR (ABXXXX) 格式
我可以看到诸如此类的建议可以应用于单个字符串
old <- "SD5464"
添加到第5个字符
n <- 5
添加到第8个字符
n2 <- 8
告诉它在 2 个字符中添加什么数字
regmatches(old, `attr<-`(n, "match.length", 0)) <- "5"
regmatches(old, `attr<-`(n2, "match.length", 0)) <- "5"
old
但要将其应用到我的数据帧中 Buffer = 500 的每一行,我一直在努力解决。我假设一个函数可以工作?但如何编写该函数我似乎无法正常工作!
如果可能的话,我更愿意在 Tidyverse 工作。
感谢帮助。
通过
tidyverse
使用 mutate()
和 if_else()
有条件地编辑 Buffer == 500
行的 NGR 列 - 您可以这样做:
# Modify the NGR column conditionally
df <- df %>%
mutate(NGR = if_else(
Buffer == 500,
paste0(substr(NGR, 1, 5), "5", substr(NGR, 6, nchar(NGR))),
NGR
))
print(df)
结果:
NGR name Buffer
1 SD93950023 jk 0
2 SD95051 rho 500
3 SD954012 hb 0