Для приведенного ниже набора данных я хочу, чтобы количество High, Above Normal, Normal в данном столбце
Я хочу получить такой результат
Попробуй это:
Сначала создайте фиктивный набор данных, похожий на ваш:
library(dplyr)
dat <- tibble::tribble(
~AL.01, ~AL.02, ~AL.03,
"Above Normal", "Above Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "High",
"Normal", "Normal", "High",
"Normal", "Normal", "Above Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Above Normal", "High", "Above Normal",
"Above Normal", "Normal", "Above Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"Normal", "Normal", "Normal",
"High", "Normal", "Normal"
)
Теперь выполните следующие операции подсчета и переименования:
AL.01 <- dat %>%
count(AL.01) %>%
rename(metric = AL.01, AL.01 = n)
AL.02 <- dat %>%
count(AL.02) %>%
rename(metric = AL.02, AL.02 = n)
AL.03 <- dat %>%
count(AL.03) %>%
rename(metric = AL.03, AL.03 = n)
final <- full_join(AL.01, AL.02) %>% full_join(AL.03)
final
Файл data.frame final
должен выглядеть так:
# A tibble: 3 x 4
metric AL.01 AL.02 AL.03
<chr> <int> <int> <int>
1 Above Normal 3 1 3
2 High 1 1 2
3 Normal 19 21 18
Используя базовый R, вы можете выполнить следующий код:
#mock up data
my_df <- data.frame(AL_01 = c("Above No", "Normal", "Normal", "High", "Above No", "Normal", "Normal", "High"),
AL_02 = c("Above No", "Normal", "Normal", "Normal", "Above No", "Normal", "Normal", "High"),
AL_03 = c("Normal", "Normal", "Normal", "High","Above No", "Normal", "Normal", "High" ))
apply(my_df, 2, table)
уступая:
AL_01 AL_02 AL_03
Above No 2 2 1
High 2 1 2
Normal 4 5 5
Команда table
подсчитывает количество различных записей в векторе. Это вызывается в функции apply
. Таким образом, команда table
выполняется для каждого столбца (из-за второго аргумента == 2) и возвращается.
Введите ?table
и ?apply
в командной строке, чтобы получить дополнительную информацию.
@RachitKinger Ваше решение также помогает OP, и это то, что имеет значение (больше всего).
Это гораздо более простой и элегантный ответ, чем то, что я опубликовал. Спасибо.