我想对字符串的最后一个字符进行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并重新组合
答案 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