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

Create new values based on length of a string in R?

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

这是我的源数据:

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 计算字符串中的字符数,但我不知道如何“count if > 5 then do this”。

很有帮助appreciated.Thanks!

您可以使用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)
#                                                      ^^^^^^^^^^^^^^^^^^^^^^^^

使用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