Как узнать, какие столбцы содержат только нули в R?

#r

Вопрос:

В настоящее время у меня есть фрейм данных, состоящий из столбцов с численностью видов в качестве значений. Эти данные не для меня, поэтому я их не знаю. Есть много 0 и что — то ценное Я стараюсь с этим:

 which(all(colSums(df==0)))
 

но я не удовлетворен результатом, есть какие-нибудь предложения? Тнх

Ответ №1:

Это должно дать вам номера столбцов, в которых есть только 0.

 which(colSums(df==0) == nrow(df))
#b 
#2 
 

Еще один способ написать это —

 which(colSums(df != 0) == 0)
 

данные

 df <- data.frame(a = c(1, 2, 3, 0), b = 0, c = c(0, 0, 0, 1))
 

Комментарии:

1. фактически, я ищу, чтобы в результате было указано имя столбца и значение TRUE или FALSE, TRUE, если ВСЕ значения в столбце равны 0

2. @TristanUbaldi Тогда не нужно использовать which colSums(df != 0) == 0

3. Вот именно! Спасибо, но мне также интересно, есть ли функция, позволяющая узнать количество столбцов, в которых результат является ИСТИННЫМ или ЛОЖНЫМ, например, в 10 столбцах в сумме, 3 ЛОЖНЫХ и 7 ИСТИННЫХ

4. table(colSums(df != 0) == 0)

Ответ №2:

Мы можем использовать select в dplyr

 library(dplyr)
df %>% 
     select(where(~ all(. == 0))) 
 

-выход

 b
1 0
2 0
3 0
4 0
 

Чтобы сделать обратное, т. е. удалить эти столбцы

 df %>%
    select(where(~ any(. != 0)))
 

данные

 df <- data.frame(a = c(1, 2, 3, 0), b = 0, c = c(0, 0, 0, 1))