使用if/else语句使用R.根据行的起始字母和字符串长度插入小数



我有一个数据框架" df",想在/其他条件下应用整个列的小数" a"

A         B
E0505   123
890      43
4505     56 

适用的规则:

  1. 如果代码以" E"开头,并且代码的长度为> 4:在字符4和5之间。
  2. 如果代码的长度为> 3,并且代码不以" E"开头:在字符3和4之间。
  3. 如果代码的长度为< = 3:返回代码。

最终输出:

A          B
E050.5   123
890       43
450.5     56

我已经尝试过,但是我不确定如何包括行开头的条件与否。

ifelse(str_length(df$A)>3, as.character(paste0(substring(df$A, 1, 3),".", substring(df$A, 4))), as.character(df$A))

使用带有正则表达式的sub,您可以做到这一点:

df$A <- sub("((?:^E.|^[^E]).{2})(.+)", "\1.\2", df$A)
df
#       A   B
#1 E050.5 123
#2    890  43
#3  450.5  56

((?:^E.|^[^E]).{2})(.+)匹配字符串:

  • 案例1:从E开始,然后是4个或更多字符,在这种情况下,捕获前4个字符,其余的作为两个单独的组,并在;
  • 之间插入.
  • 案例2:不是从E开始,而是具有4个或更多字符,在这种情况下,将前3个字符捕获,其余为两个单独的组,并在;
  • 之间插入.

字符串从E开始,总共或不少于5个字符以E开头,并且总共不到4个字符不匹配,并且不会修改。


如果忽略案例: df$A <- sub("((?:^[Ee].|^[^Ee]).{2})(.+)", "\1.\2", df$A)

最新更新