根据R中的字符串长度创建新值?

时间:2019-01-14 21:36:10

标签: r string nchar

我有一个问题,理想情况下,我需要根据字符串的长度创建新值和新行。

这是我的源数据:

NumericCode1=c("12345","1234")
NumericCode2=c("0123.45","123.4")
AlphaCode=c("","")
df=data.frame(NumericCode1,NumericCode2,AlphaCode)

我想做的是使用以下逻辑处理此数据:

如果NumericCode1或NumericCode2中的任何一个值都大于5(仅对数字计数),那么我想用每个AA:BB:CC值填充AlphaCode。因此df最终看起来像这样:

NumericCode1=c("12345","1234")
NumericCode2=c("0123.45","123.4")
AlphaCode=c("AA:BB:CC","")
df=data.frame(NumericCode1,NumericCode2,AlphaCode)

然后,我可以使用此代码为每个代码创建单独的记录,并获得所需的输出。

df %>% 
  separate_rows(AlphaCode, sep=":")

  NumericCode1 NumericCode2 AlphaCode
1        12345      0123.45        AA
2        12345      0123.45        BB
3        12345      0123.45        CC
4         1234        123.4          

我的问题是我被困在第一步。我可以使用ncharstr_lenght来计数字符串中的字符,但是我无法弄清楚如何“ 计数> 5,然后这样做”。

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用replace

cond <- nchar(sub("\\D", "", df$NumericCode1)) > 5 | nchar(sub("\\D", "", df$NumericCode2)) > 5
df$AlphaCode <- replace(df$AlphaCode,
                        cond,
                        "AA:BB:CC")
df
#  NumericCode1 NumericCode2 AlphaCode
#1        12345      0123.45  AA:BB:CC
#2         1234        123.4          

条件表明NumericCode1NumericCode2的字符数是否超过5个(仅数字)-将""替换为AA:BB:CC

数据

df = data.frame(NumericCode1, NumericCode2, AlphaCode, stringsAsFactors = FALSE)
#                                                      ^^^^^^^^^^^^^^^^^^^^^^^^

答案 1 :(得分:1)

使用stringr::str_count\\d我们只能计算数字

library(dplyr)
library(stringr)
df %>% mutate(Cond=if_else(str_count(NumericCode1,'\\d')>5|str_count(NumericCode2,'\\d')>5 ,
                           'AA:BB:CC',''))

   NumericCode1 NumericCode2   Cond
1        12345      0123.45    AA:BB:CC
2         1234        123.4