Я застрял в том, как разработать аккуратное решение, которое будет выглядеть построчно, чтобы увидеть, выполняется ли условие уникально в каждой строке.
В частности, у меня есть данные ответов на опросы, в которых используются рейтинговые шкалы. Количество категорий в шкале оценок может варьироваться в зависимости от предметов. Мои данные в широком формате.
Пример данных приведен ниже.
- В этих данных столбец под названием «Элемент» индексирует каждый элемент опроса.
- Столбцы с названиями от «Cat_1» до «Cat_5» являются категориями шкалы оценок для всех предметов. Значения в этих ячейках представляют процент респондентов, одобряющих категорию шкалы оценок. Элемент 1 имеет 5 допустимых категорий в шкале оценок, поэтому значения присутствуют в столбцах с «Cat_1 по« Cat_5 ». Item_2 имеет 4 категории шкалы оценки. NA в 'Cat_5' для Item_2 указывает на то, что это недопустимая категория шкалы оценок для этого элемента.
- Столбец, озаглавленный «Percent_missing», представляет собой процент пропущенных данных для каждого элемента (предоставляется для имитации реального применения данных).
- Столбец с именем «flr_ceil» - это пороговое значение, которое я хочу использовать, чтобы увидеть, превышает ли первая или последняя действительная категория шкалы оценок для каждого элемента свой порог.
В идеале я хотел бы добавить столбец с именем «thresh_met», который кодируется либо 0/1, в зависимости от того, превышает ли первая или последняя действительная категория шкалы оценок для каждого элемента свой порог. Например, для «Item_1» значение для «thresh_met» будет равно 1, так как Cat_1 == 33, что превышает его пороговое значение 25. Это отличается от Item_2, где значение для «thresh_met» = 0, поскольку ни значение Cat_1 или Cat_4 превышают пороговое значение 22.
Данные выглядят примерно так:
Items | Cat_1 | Cat_2 | Cat_3 | Cat_4 | Cat_5 | Percent_missing | flr_ceil |
Item_1 | 33 | 23 | 23 | 21 | 0 | 2 | 25 |
Item_2 | 20 | 30 | 20 | 10 | NA | 4 | 22 |
Код, который я разработал, приведен ниже. Должно быть понятно, где я застрял. В этом коде порог, который я хочу использовать, помечен как 'flr_ceil.'
Код:
# load packages and create data
if(!require("pacman"))install.packages("pacman")
p_load(tidyverse, magrittr, mice)
sample_dat <- tibble(
Item_1 = sample(0:4, 100, replace = TRUE, prob = c(0.1, 0.2, 0.4, 0.2, 0.1)),
Item_2 = sample(0:4, 100, replace = TRUE, prob = c(0.4, 0.2, 0.05, 0.2, 0.15)),
Item_3 = sample(0:5, 100, replace = TRUE, prob = c(0.2, 0.2, 0.1, 0.2, 0.1, 0.2)),
Item_4 = sample(0:4, 100, replace = TRUE, prob = c(0.6, 0.1, 0.2, 0.05, 0.05))) %>%
mice::ampute(prop = .25) %$%
amp
# get the valid number of categories for each item
col_names <- colnames(sample_dat) # for sorting at end of the pipe
cat_counts <- sample_dat %>%
gather(key = Item, value = rating) %>%
group_by(Item, rating) %>%
summarise(
n = n()) %>%
group_by(Item) %>%
summarise(
flr_ceil = (1/n())*100
) %>%
arrange(match(Item, col_names))
sample_dat %>%
gather(key = Item, value = rating) %>%
group_by(Item, rating) %>%
summarise(
n = n()) %>%
mutate(
prop = (n/sum(n))*100
) %>%
select(Item, rating, prop) %>%
spread(rating, prop) %>%
arrange(match(Item, col_names)) %>%
left_join(cat_counts)