суммирование частотных переменных

#r

#r

Вопрос:

У меня есть фрейм данных, и теперь я ищу итоговое количество переменных

 df <-data.frame(aa = c(NA,"bali",NA,"bali","bali",NA),
                    bb = c("can",NA,"can","can",NA,NA),
                    cc = c(NA,NA,NA,NA,"ban",NA),
                    dd = c(NA,NA,NA,NA,NA,NA))
  

суммирование подсчитывается только для переменных, имеющих какое-либо одно значение. исключая переменные, которые больше 0

 var count
aa 3
bb 3
cc 1
  

Ответ №1:

Вы можете получить данные в длинном формате, удалить NA значения, а затем count :

 library(dplyr)

df %>% 
  tidyr::pivot_longer(cols = everything(), values_drop_na = TRUE) %>%
  count(name)

#  name      n
#  <chr> <int>
#1 aa        3
#2 bb        3
#3 cc        1
  

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

1. также, если ячейки пустые …??

2. @newcomer Если есть пустые значения, которые вы хотите удалить, вы можете сделать это, добавив строку filter(value != '') после pivot_longer и перед count .

3. еще одна вещь, если я хочу, чтобы количество значений, таких как bali 3, могло 3 запретить 1

4. Тогда вместо count(name) того, чтобы использовать count(value) .

Ответ №2:

Работает ли это:

 > enframe(lapply(df, function(x) table(x, exclude =  c('',NA)))) %>% unnest(value)
# A tibble: 3 x 2
  name  value  
  <chr> <table>
1 aa    3      
2 bb    3      
3 cc    1      
> df
    aa   bb   cc dd   ee
1 <NA>  can <NA> NA <NA>
2 bali <NA> <NA> NA     
3 <NA>  can <NA> NA <NA>
4 bali  can <NA> NA     
5 bali <NA>  ban NA <NA>
6 <NA> <NA> <NA> NA <NA>
> 
  

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

1. ячейки также имеют пробелы и NA в столбцах

2. @newcomer, соответствующим образом изменил мой запрос, изменил данные, которыми вы поделились, добавив черные в столбец «ee».