提取包含TRUE FALSE

时间:2017-04-12 13:30:46

标签: r

我正在尝试提取标记包含单个TRUE值的行的rowname。请参阅以下示例。

                  Col1  Col2  Col3
Npat             FALSE  TRUE FALSE
Ttc30a1           TRUE FALSE FALSE
Gga1              TRUE  TRUE  TRUE
Gga3             FALSE FALSE FALSE
Gga2             FALSE FALSE  TRUE

我想提取包含一个唯一" TRUE"的行的rownames。值并保留有关真值的列的信息。 所需的输出可能如下所示:

                   Col1  Col2  Col3
Npat             FALSE  TRUE FALSE
Ttc30a1           TRUE FALSE FALSE
Gga2             FALSE FALSE  TRUE

我尝试使用grep和-grep,但无法识别多列中的多个值。我确信有一种简单的方法可以做到这一点,但我还没能找到。

3 个答案:

答案 0 :(得分:2)

您可以简单地将布尔值视为数字。 在基地R:

df[with(df, Col1 + Col2 + Col3  == 1) ,]

答案 1 :(得分:2)

或者您可以使用rowSums(df)==1

df1 <-read.table(text="Row  Col1  Col2  Col3
Npat             FALSE  TRUE FALSE
Ttc30a1           TRUE FALSE FALSE
Gga1              TRUE  TRUE  TRUE
Gga3             FALSE FALSE FALSE
Gga2             FALSE FALSE  TRUE",header=TRUE, row.names=1,stringsAsFactors=FALSE)

df1[rowSums(df1)==1,]

         Col1  Col2  Col3
Npat    FALSE  TRUE FALSE
Ttc30a1  TRUE FALSE FALSE
Gga2    FALSE FALSE  TRUE

答案 2 :(得分:1)

有点类似的方法:(更一般的解决方案)

使用apply对行进行求和。

df[apply(df,1,sum)==1,]