Вложенное Подмножество - PullRequest
       6

Вложенное Подмножество

0 голосов
/ 19 сентября 2019

У меня есть следующий фрейм данных

Library(dplyr)    
ID <- c(1,1,1,2,2,2,2,3,3)
Tag <- c(1,2,6,1,3,4,6,4,3)
Value <- c(5,9,3,3,5,6,4,8,9)
DF <- data.frame(ID,Tag,Value)

  ID Tag Value
1  1   1     5
2  1   2     9
3  1   6     3
4  2   1     3
5  2   3     5
6  2   4     6
7  2   6     4
8  3   4     8
9  3   3     9

Я хотел бы выполнить следующее 1) группировать по строкам ID 2) назначить значение, соответствующее определенному тегу, новому столбцу.В следующем примере я присваиваю значение тега 6 новому столбцу с идентификатором

  ID Tag Value New_Value 
1  1   1     5         3
2  1   2     9         3
3  1   6     3         3
4  2   1     3         4
5  2   3     5         4
6  2   4     6         4
7  2   6     4         4
8  3   4     8         NA
9  3   3     9         NA

Насколько мне известно, мне нужно поднастроить данные в каждой группе, чтобы получить значение для тега6. Вот мой код и ошибка msg

DF %>% group_by(ID) %>% mutate(New_Value = select(filter(.,Tag==6),Value))
Adding missing grouping variables: `ID`
Error: Column `New_Value` is of unsupported class data.frame

Другое возможное решение - создать новый фрейм данных с идентификаторами и значениями для тега 6 и объединить его с DF.Тем не менее, я считаю, что есть лучшее общее решение, используя только dplyr.

Буду признателен, если вы поможете мне понять, как выполнить вложенное подмножество в этой ситуации

Спасибо

1 Ответ

0 голосов
/ 19 сентября 2019

Если предположить, что Tag уникален в группах, вы можете сделать:

library(dplyr)

DF %>%
  group_by(ID) %>%
  mutate(New_Value = ifelse(any(Tag == 6), Value[Tag == 6], NA))

# A tibble: 9 x 4
# Groups:   ID [3]
     ID   Tag Value New_Value
  <dbl> <dbl> <dbl>     <dbl>
1     1     1     5         3
2     1     2     9         3
3     1     6     3         3
4     2     1     3         4
5     2     3     5         4
6     2     4     6         4
7     2     6     4         4
8     3     4     8        NA
9     3     3     9        NA
...