为什么不能用数字替换包含字符串的 R 向量?

Why cant R vectors containing strings be replaced with numbers?

我在 R 数据框中有一个向量,它字面上包含一年中月份的缩写形式(JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV、 DEC),我想将它们替换为传统的等价物 [1:12]

提出了以下想法,所有这些想法都给出了一个填充了不可用 (NA) 值的向量。

replace(df$month, df$month == 'JAN', '01')

df$month <- if(df$month == "JAN") '01'

df$month <- match(df$month,month.abb) 

前两个只使 NA 值是 JAN,第三个使所有月份都为 NA 值

知道为什么这不起作用,以及如何让它起作用吗?

我倾向于 merge

MonthRef <- data.frame(month_number = 1:12,
                       month_abb = toupper(month.abb))
#* Make a data frame of random months
Months <- data.frame(month = sample(MonthRef$month_abb, 20, replace=TRUE))

merge(Months, MonthRef, by.x="month", by.y="month_abb")

打字有点多,但它的优点是当我在六个月后回来时,我会很清楚我做了什么。