R 按ID标识最高值,然后将其分配给所有共享ID
我有下表,在每个EVENTID中,有几个PERSONID: 如何创建两个新变量: maxscore-根据EVENTID,对伤害分数最高的人,该分数为1 maxdiabetes-每个EVENTID,如果其中任何一个PERSONID的糖尿病=1,则该EVENTID中的所有其他PERSONID都将分配1 三角帆 图书馆弹琴 dat%>% 组\u按事件ID%>% 变异 maxscore=+INJURYSCORE==maxINJURYSCORE, maxdiabetes=+anyDIABETES>0 %>% 解组 一个tibble:6x6 PERSONID EVENTID INJURYSCORE DIABETES maxscore maxdiabetes 222 A734 3 0 1 2353 A734 4 1 1 1 3 45 B823 5 1 1 1 4423 B283 2 1 1 1 5232B2831001 6432 Y8210 数据表 图书馆数据表 datDT 0,by=EVENTID][] PERSONID EVENTID INJURYSCORE DIABETES maxscore maxdiabetes 1:222 A734 3 0 1 2:353A73441 3:45 B823 5 1 1 4:423 B283 2 1 5:232 B283 1 0 1 6:432Y821010 资料 蒂迪维尔酒店 图书馆弹琴 dat%>% 组\u按事件ID%>% 变异 maxscore=+INJURYSCORE==maxINJURYSCORE, maxdiabetes=+anyDIABETES>0 %>% 解组 一个tibble:6x6 PERSONID EVENTID INJURYSCORE DIABETES maxscore maxdiabetes 222 A734 3 0 1 2353 A734 4 1 1 1 3 45 B823 5 1 1 1 4423 B283 2 1 1 1 5232B2831001 6432 Y8210 数据表 图书馆数据表 datDT 0,by=EVENTID][] PERSONID EVENTID INJURYSCORE DIABETES maxscore maxdiabetes 1:222 A734 3 0 1 2:353A73441 3:45 B823 5 1 1 4:423 B283 2 1 5:232 B283 1 0 1 6:432Y821010 资料R 按ID标识最高值,然后将其分配给所有共享ID,r,R,我有下表,在每个EVENTID中,有几个PERSONID: 如何创建两个新变量: maxscore-根据EVENTID,对伤害分数最高的人,该分数为1 maxdiabetes-每个EVENTID,如果其中任何一个PERSONID的糖尿病=1,则该EVENTID中的所有其他PERSONID都将分配1 三角帆 图书馆弹琴 dat%>% 组\u按事件ID%>% 变异 maxscore=+INJURYSCORE==maxINJURYSCORE, maxdiabetes=+anyDIABETES>0 %>
dat这里有一个在变换中使用ave的基本R选项,例如 给
PERSONID EVENTID INJURYSCORE DIABETES maxscore maxdiabetes
1 222 A734 3 0 0 1
2 353 A734 4 1 1 1
3 45 B823 5 1 1 1
4 423 B283 2 1 1 1
5 232 B283 1 0 0 1
6 432 Y821 1 0 1 0
下面是一个在变换中使用ave的基本R选项,例如 给
PERSONID EVENTID INJURYSCORE DIABETES maxscore maxdiabetes
1 222 A734 3 0 0 1
2 353 A734 4 1 1 1
3 45 B823 5 1 1 1
4 423 B283 2 1 1 1
5 232 B283 1 0 0 1
6 432 Y821 1 0 1 0
我们可以使用as.integer
-输出
# A tibble: 6 x 6
# Groups: EVENTID [4]
# PERSONID EVENTID INJURYSCORE DIABETES maxscore maxidiabetes
# <int> <chr> <int> <int> <int> <int>
#1 222 A734 3 0 0 1
#2 353 A734 4 1 1 1
#3 45 B823 5 1 1 1
#4 423 B283 2 1 1 1
#5 232 B283 1 0 0 1
#6 432 Y821 1 0 1 0
数据
我们可以使用as.integer
-输出
# A tibble: 6 x 6
# Groups: EVENTID [4]
# PERSONID EVENTID INJURYSCORE DIABETES maxscore maxidiabetes
# <int> <chr> <int> <int> <int> <int>
#1 222 A734 3 0 0 1
#2 353 A734 4 1 1 1
#3 45 B823 5 1 1 1
#4 423 B283 2 1 1 1
#5 232 B283 1 0 0 1
#6 432 Y821 1 0 1 0
数据
对于data.table解决方案,您可以使用datDT[,:=maxscore=+INJURYSCORE==maxINJURYSCORE,maxdiabetes=+anyDIABETES>0,by=EVENTID]同时创建两列。当然可以,也可以使用[,cmaxscore,maxdiabetes:=.val1,val2]。对于data.table解决方案,您可以使用datDT同时创建两列[,:=maxscore=+INJURYSCORE==maxINJURYSCORE,maxdiabetes=+anyDIABETES>0,by=EVENTID]当然可以,也可以使用[,cmaxscore,maxdiabetes:=.val1,val2]。有任何答案解决了您的问题吗?有任何答案解决了您的问题吗?
# A tibble: 6 x 6
# Groups: EVENTID [4]
# PERSONID EVENTID INJURYSCORE DIABETES maxscore maxidiabetes
# <int> <chr> <int> <int> <int> <int>
#1 222 A734 3 0 0 1
#2 353 A734 4 1 1 1
#3 45 B823 5 1 1 1
#4 423 B283 2 1 1 1
#5 232 B283 1 0 0 1
#6 432 Y821 1 0 1 0
df1 <- structure(list(PERSONID = c(222L, 353L, 45L, 423L, 232L, 432L
), EVENTID = c("A734", "A734", "B823", "B283", "B283", "Y821"
), INJURYSCORE = c(3L, 4L, 5L, 2L, 1L, 1L), DIABETES = c(0L,
1L, 1L, 1L, 0L, 0L)), class = "data.frame", row.names = c(NA,
-6L))