我有我在,我想一个数据点的工作比较数据帧Genotype有两个参考S288C和SK1.这种比较将在数据帧的许多行(100+)上完成.以下是我的数据框的前几行:
Assay Genotype S288C SK1
1 CCT6-002 G A G
2 CCT6-007 G A G
3 CCT6-013 C T C
4 CCT6-015 G A G
5 CCT6-016 G G T
Run Code Online (Sandbox Code Playgroud)
作为最终产品,我想要一个1(S288C)和0(SK1)的字符串,具体取决于数据点匹配的引用.因此,在上面的例子中,我想要00001除了最后一个匹配以外的所有输出SK1.
小智 14
嵌套ifelse应该这样做(看看help(ifelse)用法):
ifelse(dat$Genotype==dat$S288C,1,ifelse(dat$Genotype==dat$SK1,0,NA))
Run Code Online (Sandbox Code Playgroud)
有了这个测试数据:
> dat
Genotype S288C SK1
[1,] "G" "A" "G"
[2,] "G" "A" "G"
[3,] "C" "T" "C"
[4,] "G" "A" "G"
[5,] "G" "G" "T"
[6,] "G" "A" "A"
Run Code Online (Sandbox Code Playgroud)
我们得到:
> ifelse(dat$Genotype==dat$S288C,1,ifelse(dat$Genotype==dat$SK1,0,NA))
[1] 0 0 0 0 1 NA
Run Code Online (Sandbox Code Playgroud)
(注意: 如果你在使用它时遇到问题,你需要确保列是向量,并且不被R视为因子......一个简单的for循环应该这样做:) for (i in 1:ncol(dat)){dat[,i]=as.vector(dat[,i])}.