提取包含 TRUE FALSE 的唯一组合的行的行名

Posted

技术标签:

【中文标题】提取包含 TRUE FALSE 的唯一组合的行的行名【英文标题】:Extract rowname of rows containing unique combination of TRUE FALSE 【发布时间】:2017-04-12 13:30:45 【问题描述】:

我正在尝试提取标记包含单个 TRUE 值的行的行名。请看下面的例子。

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

我想提取包含单个唯一“TRUE”值的行的行名,并保留有关真实值所在列的信息。 所需的输出可能如下所示:

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

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

【问题讨论】:

您的问题很简单,但如果可能,请考虑提供可重现的示例:***.com/questions/5963269/… 帖子标题具有误导性。 【参考方案1】:

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

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

【讨论】:

想象一下 100 列。 在这种情况下,请选择其他答案之一。【参考方案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

【讨论】:

【参考方案3】:

有点类似的方法:(更通用的解决方案)

使用apply 逐行求和。

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

【讨论】:

以上是关于提取包含 TRUE FALSE 的唯一组合的行的行名的主要内容,如果未能解决你的问题,请参考以下文章

如何将每个给定长度的行的 Bigquery 表提取到 Google Storage 中的 csv 文件?

从Excel中的行中提取唯一值

如何获取不包含某些模式的行

计算 Pandas 中具有相同列值的行的平均值

Pandas - 按函数和总和列分组以提取其他列总和为 0 的行

从文件中提取包含大量字符串之一的行