从R中特定列集中的字符串返回最大值

时间:2019-10-03 14:51:56

标签: r dataframe max

我从与此数据帧类似的程序中获得了输出:

    df <- data.frame(Pos = c(1, 2, 3), Alel1 = c('A:1', 'T:0', 'C:0.5'),
                 Alel2 = c('T:0', 'C:1', 'A:0.3'), Alel3 = c(NA, NA, 'T:0.2'),
                 Alel4 = c('A:1', 'T:1', 'C:0.5'), Alel5 = c('T:0', 'C:0', 'A:0.5'),
                 Alel6 = c(NA, NA, NA))

对于每行,我想获取Alel1,Alel 2和Alel3( group1 )的主要等位基因,以及Alel4,Alel 5和Alel6( group2 < / strong>)。另外,有关第1组和第2组中主要等位基因之间的差异的其他信息(更改)。 所以,然后我得到了新的列/数据框,它更像这样概括了等位基因信息:

 df1 <- data.frame(Group1 = c("A", "C", "C"), 
                  Group2 = c("A","T","0.5C 0.5A"), 
                  Changing = c(0,1,0.5))

我正在尝试从每一列中分离等位基因,并使用此列将其添加到新列中。

df$a <- substring(df$Alel1, 3)
df$b <- substring(df$Alel2, 3)
df$c <- substring(df$Alel3, 3)

然后使用此找到每个组的最大值

i <- as.character(c("a","b","c"))
j <- max.col(df[i],"first")

但是, j 中的值返回为 NA 而不是列名,而且我不知道如何从该列名中调用相应的等位基因。 给出我想要的任何更简单的建议,将不胜感激!

1 个答案:

答案 0 :(得分:0)

这是您想要的吗?

i <- as.character(c("a","b","c"))

j <- i[max.col(replace(df[i], is.na(df[i]), -Inf), "first")]
#[1] "a" "b" "a