#r #dplyr
Вопрос:
Я хочу закодировать новую переменную для нескольких строк в группе на основе одной строки в группе и не нахожу рабочего решения.
Минимальный рабочий пример:
df <- data.frame("participant" = c("1", "1", "1", "1", "1", "1", "1", "1",
"2", "2", "2", "2", "2", "2", "2", "2"),
"group" = c("1111", "1111", "1111", "1111", "1113", "1113", "1113", "1114",
"1111", "1111", "1113", "1113", "1113", "1113", "1113", "1113"),
"item" = c("a", "b", "c", "d", "e", "f", "g", "h",
"i", "j", "k", "l", "m", "n", "o", "p"),
"value" = c("xyz", "hlm", "test", "nop", "test", "nop", "hlm", "test",
"hlm", "test", "xyz", "xyz", "test", "xyz", "nop", "xyz"),
"type" = c("1", "2", "1", "2", "2", "1", "1", "2",
"1", "1", "2", "2", "2", "3", "1", "1"))
Я хочу 1) сгруппировать по участникам и группам, 2) проверить тип каждого элемента, имеющего значение == «тест», затем 3) закодировать новый тип столбца test_type, который распространяет тип каждого «теста» по всем строкам в одной и той же комбинации участника/группы.
Конечный результат должен выглядеть так:
df$test_type <- c("1", "1", "1", "1", "2", "2", "2", "2",
"1", "1", "2", "2", "2", "2", "2", "2")
Какие-нибудь советы?
Ответ №1:
Один из вариантов состоит в том, чтобы подмножество «типа», соответствующего «тесту», в столбце «значение» после группировки по «участнику» и «группе».
library(dplyr)
df %>%
group_by(participant, group) %>%
mutate(test_type = type[value %in% 'test']) %>%
ungroup
-выход
# A tibble: 16 × 6
participant group item value type test_type
<chr> <chr> <chr> <chr> <chr> <chr>
1 1 1111 a xyz 1 1
2 1 1111 b hlm 2 1
3 1 1111 c test 1 1
4 1 1111 d nop 2 1
5 1 1113 e test 2 2
6 1 1113 f nop 1 2
7 1 1113 g hlm 1 2
8 1 1114 h test 2 2
9 2 1111 i hlm 1 1
10 2 1111 j test 1 1
11 2 1113 k xyz 2 2
12 2 1113 l xyz 2 2
13 2 1113 m test 2 2
14 2 1113 n xyz 3 2
15 2 1113 o nop 1 2
16 2 1113 p xyz 1 2
Комментарии:
1. Извините, я вижу, что мой пример немного вводил в заблуждение. Сейчас я его отредактировал. Есть не только типы NA, они также могут быть заполнены, но мы заботимся о типе только тогда, когда значение==»тест». Таким образом, здесь задействована некоторая фильтрация, но фильтрация типа mutate(test_type = тип[значение==»тест»]) выдает ошибку.
2. @user9974638 с вашими обновленными данными обновление в моем решении работает
3. @user9974638 я не получаю никаких ошибок с
type[value == 'test']
type[value %in% 'test']
приведенным вами примером или с ним. Поскольку вы не предоставили сообщение об ошибке, оно также неясно4. Я предполагаю, что в каждой группе есть только один «тест»
5. Теперь это работает! Спасибо! Извините, возник конфликт между dplyr/plyr.