Создать новые значения на основе длины строки в R? - PullRequest
0 голосов
/ 15 января 2019

У меня проблема с тем, что в идеале мне нужно создавать новые значения и новые строки на основе длины строки.

Это мои исходные данные:

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

Я хотел бы обработать эти данные, используя следующую логику:

Если любое из значений в NumericCode1 или NumericCode2 больше 5 (считая только числа), то я бы хотел заполнить AlphaCode значениями AA: BB: CC для каждого. Таким образом, 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          

Моя проблема в том, что я застрял на первом шаге. Я могу посчитать символы в строках, используя nchar или str_lenght, но я не могу понять, как " считать, если> 5, то сделать это ".

Любая помощь высоко ценится. Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Используя 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                   
0 голосов
/ 15 января 2019

Вы можете использовать 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          

Условие говорит, что если NumericCode1 или NumericCode2 содержит более 5 символов - только цифры - замените "" на AA:BB:CC.

данные

df = data.frame(NumericCode1, NumericCode2, AlphaCode, stringsAsFactors = FALSE)
#                                                      ^^^^^^^^^^^^^^^^^^^^^^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...