我有一個功能,從文本字符串中提取月份,匹配特定的模式(如MAR06):只有[R發生變異不會返回函數值正確
library(dplyr)
pattern <- "(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\\d{2,2}"
find_month <- function(x)
{
extracted <- str_extract(x, pattern)
month_string <- substr(extracted, 1, 3)
if(!is.na(month_string) && month_string[[1]] == 'MAY')
{
value <- 1
}
else
{
value <- -1
}
return(value)
}
爲了簡化問題,我在這裏查看月份是否是五月份。 它,當我手動測試正常工作:
> find_month("HELLO THERE MAY06")
[1] 1
> find_month("BYE SEP12")
[1] -1
然而,當我把它放在一個數據幀,它總是爲每一行返回1:
a = c("HELLO THERE MAY06", "BYE SEP12")
b = c(TRUE, FALSE)
df = data.frame(desc=a, other=b)
df_mutated <- mutate(df, month = find_month(desc))
df_mutated
desc other month
1 HELLO THERE MAY06 TRUE 1
2 BYE SEP12 FALSE 1
我在做什麼錯?
爲什麼不只需使用'grepl(「MAY」,「HELLO THERE MAY06」,fixed = TRUE)',並根據需要轉換爲數字?這會給1是肯定的,0沒有 –
@RichardScriven:也許'grepl('MAY \\ d {2}',...)'以防止匹配,例如'MAYBE NOV07「'。 – jbaums