替换字符串的前N个点

Mar*_*ler 6 string r

我希望my.string用14个零替换前14个点region = 2.所有其他点应该保持原样.

df.1 = read.table(text = "
  city  county  state region                        my.string reg1 reg2
   1      1        1      1    123456789012345678901234567890   1    0
   1      2        1      1    ...................34567890098   1    0
   1      1        2      1    112233..............0099887766   1    0
   1      2        2      1    ..............2020202020202020   1    0
   1      1        1      2    ..............00..............   0    1
   1      2        1      2    ..............0987654321123456   0    1
   1      1        2      2    ..............9999988888777776   0    1
   1      2        2      2    ..................555555555555   0    1
", sep = "", header = TRUE, stringsAsFactors = FALSE)

df.1
Run Code Online (Sandbox Code Playgroud)

我不认为这里有这个问题.对不起,如果有的话.对不起,也没有花更多时间寻找解决方案.快速谷歌搜索没有找到答案.我之前在这里问过类似的问题:R:从字符串中删除最后三个点 谢谢你的帮助.

我应该澄清一点,我只想删除字符串最左边的14个连续点.如果一个字符串以一个后跟14个点的数字开头,那么这14个点应该保持原样.

这是怎么my.string看的:

123456789012345678901234567890
...................34567890098
112233..............0099887766
..............2020202020202020
0000000000000000..............
000000000000000987654321123456
000000000000009999988888777776
00000000000000....555555555555
Run Code Online (Sandbox Code Playgroud)

42-*_*42- 8

你有没有尝试过:

sub("^\\.{14}", "00000000000000", df.1$my.string )
Run Code Online (Sandbox Code Playgroud)

对于条件替换尝试:

> df.1[ df.1$region ==2, "mystring"] <- 
               sub("^\\.{14}", "00000000000000", df.1$my.string[ df.1$region==2] )
> df.1
  city county state region                      my.string reg1 reg2
1    1      1     1      1 123456789012345678901234567890    1    0
2    1      2     1      1 ...................34567890098    1    0
3    1      1     2      1 112233..............0099887766    1    0
4    1      2     2      1 ..............2020202020202020    1    0
5    1      1     1      2 ..............00..............    0    1
6    1      2     1      2 ..............0987654321123456    0    1
7    1      1     2      2 ..............9999988888777776    0    1
8    1      2     2      2 ..................555555555555    0    1
                        mystring
1                           <NA>
2                           <NA>
3                           <NA>
4                           <NA>
5 0000000000000000..............
6 000000000000000987654321123456
7 000000000000009999988888777776
8 00000000000000....555555555555
Run Code Online (Sandbox Code Playgroud)

  • 这可以"动态"完成吗?如:在具有14个或更少的零的垫上,取决于匹配的`.`的数量?也许用`gsubfun`? (2认同)