2015-02-05 126 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 
相關問題