gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:21:39 28 4
gpt4 key购买 nike

我有一个数据框“df”,想应用 if/else 条件为整个“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

我试过这个,但我不确定如何包含行是否以 E 开头的条件。

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) .

关于r - 使用 if/else 语句根据使用 R 的行的起始字母和字符串长度为列插入小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49621705/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com