我正在尝试提取标记包含单个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,但无法识别多列中的多个值。我确信有一种简单的方法可以做到这一点,但我还没能找到。
答案 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,]