R-根据键值对替换数据帧列中的所有值

R-根据键值对替换数据帧列中的所有值,r,dataframe,dictionary,replace,key-value,R,Dataframe,Dictionary,Replace,Key Value,在“自动”数据集中,一列包含车辆来源代码。 美国人1人,欧洲人2人,日本人3人。 我想用字符串替换代码。所有1应替换为“amer”,2应替换为“euro”,3应替换为“jap” 查询 在R中创建关键值对的最佳方法是什么? (我是用一个列表做的,有没有更好的方法?) 基于键值对替换数据帧列中的值的最有效方法是什么 以下是数据模拟: a = replicate(15, sample(1:3, 1)) a #> 3 3 3 3 1 2 3 1 3 3 1 3 1 2 3 ## Creat

在“自动”数据集中,一列包含车辆来源代码。 美国人1人,欧洲人2人,日本人3人。 我想用字符串替换代码。所有1应替换为“amer”,2应替换为“euro”,3应替换为“jap”

查询

  • 在R中创建关键值对的最佳方法是什么? (我是用一个列表做的,有没有更好的方法?)

  • 基于键值对替换数据帧列中的值的最有效方法是什么

  • 以下是数据模拟:

    a = replicate(15, sample(1:3, 1))
    a
    #> 3 3 3 3 1 2 3 1 3 3 1 3 1 2 3
    
    
    ## Create key-value pairings
    origin_code = vector(mode='list', length=3)
    names(origin_code) = c(1, 2, 3)
    origin_code[[1]] = 'amer'
    origin_code[[2]] = 'euro'
    origin_code[[3]] = 'jap'
    origin_code
    #> 
    $`1`
    [1] "amer"
    
    $`2`
    [1] "euro"
    
    $`3`
    [1] "jap"
    
    ## Replace values
    <Help needed here>
    
    # I tried the following but got NULL (Why?)
    # replace values
    b = for (x in unique(a)) {replace(a, a==x, origin_code[x])}
    b
    #> NULL
    
    a=复制(15,样本(1:3,1))
    A.
    #> 3 3 3 3 1 2 3 1 3 3 1 3 1 2 3
    ##创建键值对
    原点代码=矢量(模式=列表',长度=3)
    姓名(来源代码)=c(1,2,3)
    原产地代码[[1]]=“美国”
    原产地代码[[2]]=“欧元”
    原产地代码[[3]]=“日本”
    来源代码
    #> 
    $`1`
    [1] “阿默尔”
    $`2`
    [1] “欧元”
    $`3`
    [1] “日本佬”
    ##替换值
    #我尝试了以下操作,但结果为空(为什么?)
    #替换值
    b=for(唯一(a)中的x){replace(a,a==x,原点代码[x])}
    B
    #>空的
    
    因为
    a
    是一个数值,所以它可以用作索引

    unlist(origin_code[a], use.names = FALSE)
    #[1] "jap"  "jap"  "jap"  "jap"  "amer" "euro" "jap"  "amer" "jap"  "jap"  "amer" "jap"  "amer" "euro" "jap" 
    

    如果
    列表
    和'a'的名称不是数字,则可以使用
    匹配

    unlist(origin_code[match(a, names(origin_code))], use.names = FALSE)
    
    或者也可以使用命名向量执行此操作

    unname(unlist(origin_code)[as.character(a)])
    

    在OP的代码中,我们可以做一个简单的更改

    b <- a
    for(x in unique(a))  b <- replace(b, b == x, origin_code[[x]])
    b
    

    b感谢您的及时回复。你的解决方案有效。为什么我的方式失败了呢?请您提出更正意见好吗?@rahul ahuja请查看更新的帖子谢谢您的澄清。@rahul ahuja您分配给
    b
    的任务超出了for循环。因此,在循环中,
    replace
    ,它只是在不改变'a'@rahul ahuja的情况下进行替换,您可以使用
    as.list(setNames(c('amer','euro','jap'),1:3))
    a <- c(3, 3, 3, 3, 1, 2, 3, 1, 3, 3, 1, 3, 1, 2, 3)