使用命名向量生成dataframe列

使用命名向量生成dataframe列,r,R,我计划用命名向量创建一个新列,它可以匹配dataframe中的名称,但似乎匹配没有正确完成 下面是一个示例代码 vector <- c(APPLE=10,BANANA=2,KIWI=3,CARROT=4,ORANGE=5) df <- data.frame(fru=c("APPLE","KIWI","CARROT","CARROT","KIWI","ORANGE"

我计划用命名向量创建一个新列,它可以匹配dataframe中的名称,但似乎匹配没有正确完成

下面是一个示例代码

vector <- c(APPLE=10,BANANA=2,KIWI=3,CARROT=4,ORANGE=5)

df <- data.frame(fru=c("APPLE","KIWI","CARROT","CARROT","KIWI","ORANGE","BANANA"))
df$num <- vector[df$fru]
但在数据框中,对应于猕猴桃和胡萝卜的数字不匹配

     fru num
1  APPLE  10
2   KIWI   4
3 CARROT   3
4 CARROT   3
5   KIWI   4
6 ORANGE   5
7 BANANA   2

我在向量中建立索引的方式是否存在任何误解?

可能“fru”列是
因子。它必须是
字符

vector[as.character(df$fru)]
#  APPLE   KIWI CARROT CARROT   KIWI ORANGE BANANA 
#   10      3      4      4      3      5      2 


R4.0
开始,当我们创建
data.frame
(或使用
read.csv/read.table
等)时,默认情况下,
stringsAsFactors=FALSE
。如果
R
的版本小于4,则默认情况下
stringsAsFactors=TRUE
。一个选项是在构造
数据.frame
时将参数指定为
FALSE
,或者使用
as.character

将参数转换为
字符
我在我的RStudio控制台复制了你的逐字代码,并且
df
中猕猴桃和胡萝卜的对应数字与
向量中的数字匹配。我不知道你是怎么得到不同的结果的


我也不明白……最好在另一台计算机上试试。。。谢谢你,真是太棒了!正如您所建议的,我的R版本是3.6.1。当我改变专栏的类别时,它起了作用。非常感谢。
vector[as.character(df$fru)]
#  APPLE   KIWI CARROT CARROT   KIWI ORANGE BANANA 
#   10      3      4      4      3      5      2