提取包含 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 文件?