R 由于另一列中的值,我有重复的ID

R 由于另一列中的值,我有重复的ID,r,dplyr,sas,tidyverse,R,Dplyr,Sas,Tidyverse,由于另一列中存在多种类型,ID重复。我想删除重复的ID,并为特定类型设置一个指示符列。如果可能,我们很乐意在R和SAS中看到解决方案。以下是我所拥有和需要的: have<-data.frame(id=c(1,1,2,3,3,3,4,5,5,6)) have$type<-c("healthy","healthy","injury1","healthy","injury2", "injury1","healthy","injury2","healthy","injury

由于另一列中存在多种类型,ID重复。我想删除重复的ID,并为特定类型设置一个指示符列。如果可能,我们很乐意在R和SAS中看到解决方案。以下是我所拥有和需要的:

have<-data.frame(id=c(1,1,2,3,3,3,4,5,5,6))
have$type<-c("healthy","healthy","injury1","healthy","injury2",
         "injury1","healthy","injury2","healthy","injury2")

need<-data.frame(id=c(1,2,3,4,5,6))
need$injury_ind<-c(0,1,1,0,1,1)

have在
R
中,我们可以使用
stru-detect
(或
grepl
)在按“id”分组后检测“type”中的“injury”

library(dplyr)
library(stringr)
have %>%
   group_by(id) %>% 
   summarise(injury_id = +(any(str_detect(type, 'injury'))))
# A tibble: 6 x 2
#     id injury_id
#  <dbl>     <int>
#1     1         0
#2     2         1
#3     3         1
#4     4         0
#5     5         1
#6     6         1
或者在不分组的情况下,我们可以使用
grepl
查找具有“伤害”类型的“id”,并检查
唯一的
“id”中包括哪些

un1 <- unique(have$id)
data.frame(id = un1, injury_id = +(un1 %in% 
              unique(have$id[grepl('injury', have$type)])))

un1是否可以在str_detect()?@Tun3In_N0w中使用or运算符“|”。是的,这是可能的<代码>str|u detect(键入'injury | something')
我正在尝试使用str|u detect(键入“injury1 | injury2”)获取dplyr样式的内容@Tun3In\u N0w您不需要执行
injury1
injury2
等操作,因为
str\u detect
与子字符串
injury
匹配,无论哪里有
伤害,它都能为您提供预期的输出,谢谢您的帮助。我做过很多类似的事情。种类不多,而且通常提前知道。所以,我不需要发短信了。我想你需要澄清这个问题。ID 3和5都是健康和受伤的。如果这是有意的,我认为您需要更多地说明数据代表了什么,以及您试图实现什么。
un1 <- unique(have$id)
data.frame(id = un1, injury_id = +(un1 %in% 
              unique(have$id[grepl('injury', have$type)])))