将数据帧的三列中的每个值替换为R中第二个数据帧中的列的值

时间:2017-01-16 05:23:33

标签: r

我一直在寻找你的帖子,谈论用一个第二列基于条件替换一个列的值,但它们没有用。

我将尝试简化我的两个数据框:

> paircomparison 
V1 V2 V3 V4

A1 A1 A2 A2
A1 A1 A3 A3
A1 A1 A4 A4
A2 A2 A1 A1
A2 A2 A3 A3
A2 A2 A4 A4
A3 A3 A1 A1 
A3 A3 A2 A2
A3 A3 A4 A4
A4 A4 A1 A1
A4 A4 A2 A2
A4 A4 A3 A3

>Ids

V1 V2
A1 London
A2 Roma
A3 Paris
A4 New York

我想每次将paircomparison [,1:4]中的值替换为Ids $ V1中的值,其值为Ids $ V2。

我一直在尝试以下循环:

for (x in paircomparison[,1:4]){
    if (x == Ids[,1]){
        x <- Ids[,2])}
}

但它不起作用。我对R脚本很新,很可能我在脚本中缺少一些步骤。

2 个答案:

答案 0 :(得分:0)

我们可以尝试

paircomparison[] <- lapply(paircomparison, function(x) setNames(Ids$V2, Ids$V1)[x])
paircomparison
#         V1       V2       V3       V4
#1    London   London     Roma     Roma
#2    London   London    Paris    Paris
#3    London   London New York New York
#4      Roma     Roma   London   London
#5      Roma     Roma    Paris    Paris
#6      Roma     Roma New York New York
#7     Paris    Paris   London   London
#8     Paris    Paris     Roma     Roma
#9     Paris    Paris New York New York
#10 New York New York   London   London
#11 New York New York     Roma     Roma
#12 New York New York    Paris    Paris

或者只是

paircomparison[] <- setNames(Ids$V2, Ids$V1)[as.matrix(paircomparison)]

答案 1 :(得分:0)

我们可以unlist数据框并使用match来比较值

paircomparison[] <- Ids$V2[match(unlist(paircomparison), Ids$V1)]
paircomparison

#       V1      V2      V3      V4
#1   London  London    Roma    Roma
#2   London  London   Paris   Paris
#3   London  London NewYork NewYork
#4     Roma    Roma  London  London
#5     Roma    Roma   Paris   Paris
#6     Roma    Roma NewYork NewYork
#7    Paris   Paris  London  London
#8    Paris   Paris    Roma    Roma
#9    Paris   Paris NewYork NewYork
#10 NewYork NewYork  London  London
#11 NewYork NewYork    Roma    Roma
#12 NewYork NewYork   Paris   Paris
相关问题