2015-02-05 231 views
0

如果第一列在另一个data.frame中匹配,我想替换data.frame的第二列中的字符。因此,文件是这样的:如果第一列中的元素与另一个data.frame中的另一个元素相匹配,如何替换数据框第二列中的元素?

文件1:

 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' 

在此先感谢

+0

随着错误消息的选项表示,你必须因子变量。将其改为人物。 'yourdata $ yourcolumn < - as.character(yourdata $ yourcolumn)' – akrun

+0

当我运行命令时,我得到所有行“PS”。错误消失了 – mahmood

回答

2

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

df1$Group<-c("PS","TS")[ (df1$Group %in% df2$Genotype) +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 
相关问题