向 R 中特定行的字符串添加字符

问题描述 投票:0回答:1

我已经看到了这两个方面的许多可重复的示例,但无法完全弄清楚如何将概念应用于实际数据!

我有一个包含 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 工作。

感谢帮助。

r string function
1个回答
0
投票

通过

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
© www.soinside.com 2019 - 2024. All rights reserved.