根据字符串中的条件和位置删除字符 - R
Remove character based on condition and position in string - R
我正在用这样的字符变量清理数据集:
df <- c("2015 000808", "2013 000041", "2015 000005", "2015 301585", "2015 311585", "2014 380096", "2013 100041")
所以我可以实现这个结果,其中第二个数字前面的 000 被删除,每个数字都粘贴在一起:
"2015808"
"201341"
"20155"
"2015301585"
"2015311585"
"2014380096"
"2013100041"
我一直在尝试找到删除字符串第二部分中数字之前出现的 0 的最佳方法。我看过 gsub
和 substring
但我有点困惑如何根据它们的位置和条件删除零模式?类似于“仅当它们位于数字 1-9 和位置 7-11 时才删除一个或多个零”。
我们可以使用 read.table
来读取两列(使用默认的 space 分隔符会自动读取为 numeric
列,而数字 class 不允许0 前缀,因此去除 0s),然后使用 do.call
按行 paste
data.frame 列
do.call(paste0, read.table(text = df, header = FALSE))
[1] "2015808" "201341" "20155" "2015301585" "2015311585" "2014380096" "2013100041"
或与sub
- 匹配一个或多个spaces (\s+
) 后跟零个或多个(*
) 0,并替换为空白(""
)
sub("\s+0*", "", df)
[1] "2015808" "201341" "20155" "2015301585" "2015311585" "2014380096" "2013100041"
虽然 akrun 的方法是应该使用的方法。这是 stringr
组成:
- 与
word(df, 1)
我们取字符串的左边部分
- 和
word(df, -1)
我们取右边的部分(这里我们用
2a. str_remove_all
使用正则表达式 ^0+
删除前导零。
- 最后我们用
str_c
把两部分结合起来:
library(stringr)
str_c(word(df,1), str_remove_all(word(df, -1), '^0+'))
[1] "2015808" "201341" "20155" "2015301585" "2015311585" "2014380096" "2013100041"
我正在用这样的字符变量清理数据集:
df <- c("2015 000808", "2013 000041", "2015 000005", "2015 301585", "2015 311585", "2014 380096", "2013 100041")
所以我可以实现这个结果,其中第二个数字前面的 000 被删除,每个数字都粘贴在一起:
"2015808"
"201341"
"20155"
"2015301585"
"2015311585"
"2014380096"
"2013100041"
我一直在尝试找到删除字符串第二部分中数字之前出现的 0 的最佳方法。我看过 gsub
和 substring
但我有点困惑如何根据它们的位置和条件删除零模式?类似于“仅当它们位于数字 1-9 和位置 7-11 时才删除一个或多个零”。
我们可以使用 read.table
来读取两列(使用默认的 space 分隔符会自动读取为 numeric
列,而数字 class 不允许0 前缀,因此去除 0s),然后使用 do.call
paste
data.frame 列
do.call(paste0, read.table(text = df, header = FALSE))
[1] "2015808" "201341" "20155" "2015301585" "2015311585" "2014380096" "2013100041"
或与sub
- 匹配一个或多个spaces (\s+
) 后跟零个或多个(*
) 0,并替换为空白(""
)
sub("\s+0*", "", df)
[1] "2015808" "201341" "20155" "2015301585" "2015311585" "2014380096" "2013100041"
虽然 akrun 的方法是应该使用的方法。这是 stringr
组成:
- 与
word(df, 1)
我们取字符串的左边部分 - 和
word(df, -1)
我们取右边的部分(这里我们用 2a.str_remove_all
使用正则表达式^0+
删除前导零。 - 最后我们用
str_c
把两部分结合起来:
library(stringr)
str_c(word(df,1), str_remove_all(word(df, -1), '^0+'))
[1] "2015808" "201341" "20155" "2015301585" "2015311585" "2014380096" "2013100041"