Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何选择每个人、每个条件的第一个实例?_R_Dplyr - Fatal编程技术网

R 如何选择每个人、每个条件的第一个实例?

R 如何选择每个人、每个条件的第一个实例?,r,dplyr,R,Dplyr,奇妙的堆叠溢出的人 我正在与我的R代码斗争。我有一大群人去过很多医院,我想得到的是每个人的第一例疾病。在删除重复项后,我有6613个观察结果,在我的数据集中有1306个唯一id。 所以我知道我需要有至少1306例第一种疾病的病例,而且可能更多,因为有些人有多种共病 我已经按病人安排好了,然后按日期安排好了。例如: 因此,对于0001号患者,我想了解他们的第一例心绞痛、慢性IHD和其他任何问题(事实上,一些患者有17次就诊,其中大多数是重新诊断的) 我尝试了在StackOverflow上找到的两

奇妙的堆叠溢出的人

我正在与我的R代码斗争。我有一大群人去过很多医院,我想得到的是每个人的第一例疾病。在删除重复项后,我有6613个观察结果,在我的数据集中有1306个唯一id。 所以我知道我需要有至少1306例第一种疾病的病例,而且可能更多,因为有些人有多种共病

我已经按病人安排好了,然后按日期安排好了。例如:

因此,对于0001号患者,我想了解他们的第一例心绞痛、慢性IHD和其他任何问题(事实上,一些患者有17次就诊,其中大多数是重新诊断的)

我尝试了在StackOverflow上找到的两种解决方案,但我得到了荒谬的答案,比如35次观察。这让我用dplyr得出了最接近的答案:
data\u new%group\u by(iid)%%>%arrange(AdmiDate)%%>%slice(1L)
但我仍然没有预期的数字;正如我所说,我至少应该得到1306


任何帮助都将不胜感激!!提前非常感谢!

没有这些数据很难知道,但是如果我通过看你的照片来猜测,我认为下面的方法应该有效

data%>%group_by(ID,Def)%>%filter(酰胺==min(酰胺))

过滤ID、Def组中的最新数据(
min(AmiDate)
)。这里有一个模拟数据的
dplyr
解决方案:首先
group\u,通过
两个分组变量
ID
Def
,然后使用
slice\u min
选择每组日期最早的行:

library(dplyr)
df %>%
  group_by(ID, def) %>%
  slice_min(admidate)
# A tibble: 4 x 3
# Groups:   ID, def [4]
  ID    def   admidate  
  <chr> <chr> <date>    
1 0001  A     2005-03-21
2 0001  B     2008-09-17
3 0002  A     2006-06-18
4 0002  X     2009-12-07
库(dplyr)
df%>%
分组依据(ID,def)%>%
切片_min(添加日期)
#一个tibble:4x3
#组:ID,def[4]
身份证日期
10001A 2005-03-21
20001b 2008-09-17
3002A 2006-06-18
40002x2009-12-07
数据:


df将您的数据粘贴为文本-请使用例如
dput(head(df))发布一些数据
Hi,不幸的是,由于数据安全原因,我无法发布真实数据!另外,为了澄清,admidate是一种字符形式,但admidate被翻译成R可以理解的日期格式!非常棒,非常棒的人,我非常感谢你。最后一个问题,如果可以的话:当我这样做时,它会删除任何缺少日期的值。呵呵我会保留这些吗?我已经试过在你给出的答案中加入na.rm=F和is.na,但它有点崩溃。有什么建议吗?
df <- data.frame(
  ID = c("0001", "0001", "0002", "0002", "0002"),
  def = c("A", "B", "X", "A", "X"),
  admidate = as.Date(c("21/03/2005", "17/09/2008", "07/12/2009", "18/06/2006", "22/11/2021"), format = "%d/%m/%Y")
)