如果第一列中的元素与另一个data.frame中的另一个元素匹配,如何替换第二列数据框中的元素?

时间:2015-02-05 07:33:28

标签: r replace dataframe match

如果第一列与另一个data.frame匹配,我想替换data.frame第二列中的字符。所以文件是这样的:

File1中:

        Genotype          Group Type
1  08ZB02005DH01  08ZB02005DH01 Line
2  08ZB07005DH04  08ZB07005DH04 Line
3  08ZB08B06DH02  08ZB08B06DH02 Line
4  08ZB13005DH04  08ZB13005DH04 Line
5  08ZB18B24DH01  08ZB18B24DH01 Line
6 JRP4RA6121-002 JRP4RA6121-002 Line

文件2:

       Genotype      POL       RE       ZE
1 08ZB08B06DH02 102.6110 94.94690 97.33455
2 08ZB18B24DH01 102.3411 94.18070 96.29505
3 08ZB02005DH01 101.0357 95.59205 96.62890
4 08ZB13005DH04 101.9972 96.57825 98.62155
5 08ZB07005DH04 103.5134 92.92665 96.10605

这是我使用的代码:

Group_code1 <- 'TS'                     
Group_code2 <- 'PS'
for (i in 1:dim(file1)[1]) {
    if ((match(file1[i,1],file2[,1], nomatch=0)) >= 1) {test[i,2]<-Group_code2} else { test[i,2]<-Group_code2}

  }

我期望的输出是:

        Genotype Group Type
1  08ZB02005DH01  TS Line
2  08ZB07005DH04  TS Line
3  08ZB08B06DH02  TS Line
4  08ZB13005DH04  TS Line
5  08ZB18B24DH01  TS Line
6 JRP4RA6121-002  PS Line

但是我收到了这个错误:

Warning messages:
1: In `[<-.factor`(`*tmp*`, iseq, value = "PS") :
  invalid factor level, NA generated

我想保留这部分代码(或者至少类似的代码):

Group_code1 <- 'TS'                     
Group_code2 <- 'PS'

提前致谢

2 个答案:

答案 0 :(得分:2)

如果df1是您的第一个data.framedf2是第二个,您可以尝试:

df1$Group<-c("PS","TS")[ (df1$Group %in% df2$Genotype) +1]

答案 1 :(得分:0)

使用data.table

的选项
library(data.table) 
setkey(setDT(df1), Group)[df2[,1, drop=FALSE],
            Group:='TS'][Group!='TS', Group:='PS'][]
#         Genotype Group Type
#1:  08ZB02005DH01    TS Line
#2:  08ZB07005DH04    TS Line
#3:  08ZB08B06DH02    TS Line
#4:  08ZB13005DH04    TS Line
#5:  08ZB18B24DH01    TS Line
#6: JRP4RA6121-002    PS Line
相关问题