如果第一列中的元素与另一个 data.frame 中的另一个元素匹配,如何替换数据框第二列中的元素?
How to replace elemets in second column of data frame if the element in first column match another element in another 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'
提前致谢
如果 df1
是你的第一个 data.frame
而 df2
是第二个,你可以尝试:
df1$Group<-c("PS","TS")[ (df1$Group %in% df2$Genotype) +1]
一个选项使用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
如果 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'
提前致谢
如果 df1
是你的第一个 data.frame
而 df2
是第二个,你可以尝试:
df1$Group<-c("PS","TS")[ (df1$Group %in% df2$Genotype) +1]
一个选项使用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