#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