R: регулярное выражение для извлечения смешанных фракций - PullRequest
1 голос
/ 25 апреля 2020

У меня есть один фрейм данных с одним столбцом, содержащим строку чисел, очень похожую на эту

´´´ > df id full_quant 54 4 2 14 1/2 55 4 4 6 56 4 1/2 57 4 3 58 4 1 59 4 1 1/2

Я хочу создать новый столбец $ количество с либо одно число, например, 1 или 10, либо дробь, либо смешанная дробь. В частности, используя первый соответствующий шаблон строки - по этой причине я решил использовать sub вместо gsub

Это код, который я использовал

df$quantity <- sub("(^[1-9]*\\b.[\\d\\\\d]?)", " \\1", df$full_quant)

Но я получаю копию первого столбца

> df
   id full_quant   quantity
54  4  2 14 1/2   2 14 1/2 
55  4       4 6        4 6 
56  4       1/2        1/2 
57  4         3          3 
58  4         1          1 
59  4      1 1/2      1 1/2

Я хочу получить следующее:

> df id full_quant quantity 54 4 2 14 1/2 2<br> 55 4 4 6 4 56 4 1/2 1/2 57 4 3 3 58 4 1 1 59 4 1 1/2 1 1/2

Я использую RStudio. Был бы очень признателен, если бы кто-то мог помочь !!

1 Ответ

1 голос
/ 25 апреля 2020

Ниже работает (но требует stringr):

df <- data.frame(id = rep(4, 6), 
                 full_quant = c("2 14 1/2", "4 6", "1/2", "3", "1", "1 1/2"))

df$quantity <- stringr::str_extract(df$full_quant, "^([1-9]*(\\s?\\d*\\/\\d)?)")

df

#   id full_quant quantity
# 1  4   2 14 1/2        2
# 2  4        4 6        4
# 3  4        1/2      1/2
# 4  4          3        3
# 5  4          1        1
# 6  4      1 1/2    1 1/2

И это базовая версия R:

df$quantity <- regmatches(df$full_quant, regexpr("^([1-9]*(\\s?\\d*\\/\\d)?)",df$full_quant))

или с использованием sub:

df$quantity <- sub("^([1-9]*(\\s?\\d*\\/\\d)?).*", "\\1", df$full_quant)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...