如果第一列与另一个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'
提前致谢
答案 0 :(得分:2)
如果df1
是您的第一个data.frame
而df2
是第二个,您可以尝试:
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