如果/其他基于最后一个字符

时间:2019-07-09 15:28:29

标签: r

我想对字符串的最后一个字符进行if / else

数据如下:

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

如果它有L,我想将1.03放在一列中,否则为1

到目前为止,我将字符串拆分并绑定了

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

但是现在我不敢说数据是否以'L'结尾,则输入1.03否则为1并重新组合

3 个答案:

答案 0 :(得分:4)

代替分割字符串,您可以使用一些正则表达式。在"-"之前获取字符,并检查它是"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

数据

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))

答案 1 :(得分:3)

我们可以使用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))

答案 2 :(得分:3)

如果字符串的两部分始终由' - '隔开,并且该字符序列在其他任何地方都没有出现,则可以避免使用特殊的正则表达式元字符,而是检查字符串是否包含'L - ' < / p>

df$value <- 1 + grepl('L - ', df$Product)*.03