Создайте новый столбец, показывающий, что одна из предыдущей группы загрязнена в r

#r

Вопрос:

У меня есть список различных групп , я хочу создать новый столбец, в котором будет указано, что по крайней мере одному человеку в этой конкретной группе было выполнено это условие . ex

Идентификатор группы Мертвый
12 0
12 1
12 0
130 0
130 0
144 1
144 1
144 0

и хочу сделать новый график, как этот

Group_ID Мертвый Пострадавших
12 0 1
12 1 1
12 0 1
130 0 0
130 0 0
144 1 1
144 1 1
144 0 1

это продолжается дольше с различными размерами групп

данные поступают из большего набора, который я просматриваю, в котором я пытался

 test1 lt;- LargeSet%gt;%   group_by(Group_ID)%gt;%  mutate(affected= case_when((Deadgt;0~1), (Deadlt;1~0)))  

вместо этого я продолжаю получать совпадающие мертвые и затронутые строки

Ответ №1:

Вы можете проверить сумму «мертвой» переменной для каждого идентификатора с помощью функции sapply следующим образом.
Если у пациента суммаgt;=1, то значение, на которое влияет, будет 1 ; в противном случае 0.

 #1- Dataset creation df=data.frame(id=c(12,12,12,130,130,144,144,144),dead=c(0,1,0,0,0,1,1,0))  #2- Creating and filling the affected variable df$affected=sapply(df$id,function(x) ifelse(sum(subset(df,id==x)$dead)gt;=1,1,0))  

Ответ №2:

Вот альтернативное использование any . После группировки по Group_ID , any вернет значение TRUE или FALSE для группы, если хотя бы одна из строк Dead не равна нулю (в данном случае). Перед ним будет преобразован логический результат либо в 1, либо в 0.

 library(dplyr)  df %gt;%  group_by(Group_ID) %gt;%  mutate(Affected =  any(Dead))  

Вы также можете использовать any(Dead == 1) более конкретные значения в Dead столбце.

Выход

 Group_ID Dead Affected  lt;intgt; lt;intgt; lt;intgt; 1 12 0 1 2 12 1 1 3 12 0 1 4 130 0 0 5 130 0 0 6 144 1 1 7 144 1 1 8 144 0 1