使用二进制列对新数据框进行子集化

Subset a new dataframe with binary columns

我想识别 data.frame 中的二进制列。并根据该条件制作新的 df。

比如这个table

my.table <-read.table(text="a,b,c
0,2,0
0.25,1,1
1,0,0", header=TRUE, as.is=TRUE,sep = ",")

也许您可以保留只有 0 和 1 值的列。

Filter(function(x) all(x %in% c(0, 1)), my.table)

#  c
#1 0
#2 1
#3 0

几乎没有其他变体可以做同样的事情:

library(dplyr)
library(purrr)

#2
my.table[colSums(my.table == 0 | my.table  == 1) == nrow(my.table)]
#3
my.table %>% select(where(~all(. %in% c(0, 1))))
#4
keep(my.table, ~all(. %in% c(0, 1)))

我们可以使用base R

my.table[colSums(sapply(my.table, `%in%`, c(0, 1))) == nrow(my.table)]
#  c
#1 0
#2 1
#3 0