эта проблема раздражает, потому что я ищу ответ все утро и знаю, что ответ должен быть очень простым.
У меня есть df с несколькими факторами или переменными (больше, чем в этом примере) и только два уровня:
row.name Factor1 Factor2 Factor3 Factor4
1 dog dog cat cat
2 dog dog cat dog
3 dog cat dog dog
4 dog cat dog dog
Теперь я просто хочу отбросить эти столбцы, которые содержат dog и cat > 1
row.name Factor2 Factor3
1 dog cat
2 dog cat
3 cat dog
4 cat dog
Это должно быть очень легко, но я не могу найти правильное решение.Я уже могу отбросить столбцы, которые содержат только один уровень, но не столбцы с двумя уровнями, но только с одним вхождением одного уровня.
Любая помощь очень ценится.
* edit
Оба подхода Райана сработали для меня после небольшого изменения.Исходные решения содержали только столбцы, которые содержали только dog , например Factor1
row.name Factor1
1 dog
2 dog
3 dog
4 dog
Следовательно, я изменил его следующим образом:
df %>%
select_if(~ !is.factor(.x) | sum(tabulate(.x) > 1) >= 2)
и
df[, sapply(df, function(x) !is.factor(x) | sum(tabulate(x) > 1) >= 2)]
Оба способа работают отлично.