我有一个包含以下三个值的数据框:0、1 和 ?。 0 和 1 是字符而不是数字数据。我正在尝试对数据框进行子集化以删除以下内容:
所以数据集应该没有不变的列或有缺失值的列。
这里是数据框的图示:
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10
r1 0 1 0 1 ? ? ? ? 0 1
r2 0 1 0 1 1 0 ? ? 0 1
r3 0 1 0 1 1 0 0 1 1 0
r4 0 1 0 1 1 0 0 1 1 0
r5 0 1 0 1 1 0 0 1 ? 1
r6 0 1 0 1 1 0 0 1 ? 0
r7 0 1 1 0 1 0 0 1 0 0
所以我想排除c1、c2、c5、c6、c7、c8、c9。我如何在 base R 或 tidyverse 中执行此操作?
在 tidyverse 中:
df %>% select_if(~!any(.x == '?') & !all(.x == 1) & !all(.x == 0))
c3 c4 c10
r1 0 1 1
r2 0 1 1
r3 0 1 0
r4 0 1 0
r5 0 1 1
r6 0 1 0
r7 1 0 0
> sapply(df,is.integer) & colMeans(df==0)<1 & colMeans(df==1)<1
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10
FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE