Если / еще на основе последнего символа - PullRequest
1 голос
/ 09 июля 2019

Я хочу сделать if / else для последнего символа в строке

Данные выглядят так:

Product:     
ANCHOR AEROSOL CREAM 250G - 2003726   
ARLA B.O.B SKIMMED MILK 2L - 7787579

Если у него есть LI, я хочу поместить 1.03 в столбецв противном случае 1

Пока что я разделил строку и связал ее

extra <- str_split(sains_part$Product, "-", simplify = TRUE)
final <- cbind(sains_part, extra)

Но теперь я не знаю, как сказать, заканчиваются ли данные на 'L', поставить 1,03, иначе 1 и повторнообъединить

Ответы [ 3 ]

4 голосов
/ 09 июля 2019

Вместо разделения строки вы можете воспользоваться помощью некоторого регулярного выражения.Получить символ до "-" и проверить, является ли он "L" или "G", и присвоить значения соответственно.

df$Value <- c(1, 1.03)[(sub(".*(.)\\s+-.*", "\\1", df$Product) == "L") + 1]
df
#                               Product value
#1  ANCHOR AEROSOL CREAM 250G - 2003726  1.00
#2 ARLA B.O.B SKIMMED MILK 2L - 7787579  1.03

data

df <- structure(list(Product = structure(1:2, .Label = c("ANCHOR AEROSOL 
CREAM 250G - 2003726", 
"ARLA B.O.B SKIMMED MILK 2L - 7787579"), class = "factor")), class = 
"data.frame", row.names = c(NA, -2L))
3 голосов
/ 09 июля 2019

Если две части строки всегда разделены ' - ' и эта последовательность символов больше нигде не встречается, вы можете избежать использования специальных метасимволов регулярных выражений и вместо этого проверить, содержит ли строка 'L - '

df$value <- 1 + grepl('L - ', df$Product)*.03
3 голосов
/ 09 июля 2019

Мы можем использовать grepl

df$Value <- c(1, 1.03)[grepl("\\b\\d+L\\b", df$Product) + 1]
df$Value
#[1] 1.00 1.03

данные

df <- structure(list(Product = c("ANCHOR AEROSOL CREAM 250G - 2003726", 
"ARLA B.O.B SKIMMED MILK 2L - 7787579")), class = "data.frame",
row.names = c(NA, 
-2L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...