比较跨越多行的数据框中的两列

Sam*_*bus 11 r dataframe

我有我在,我想一个数据点的工作比较数据帧Genotype有两个参考S288CSK1.这种比较将在数据帧的许多行(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])}.