#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».