R 在列表中循环以匹配可能具有多个匹配项的值

R 在列表中循环以匹配可能具有多个匹配项的值,r,R,我感兴趣的是在诊断代码列表中循环,如果值匹配,则使用先前计算的风险分数填充新变量,如果有多个匹配,则使用最高风险分数填充新变量 我希望采用原始数据集的长格式,为每个ID匹配具有最高风险分数的proc编号,并将proc编号和风险分数存储在单独的变量中 我有一些使用if循环在广泛数据中做类似事情的经验,但我不知道如何用这种方式来做。我没有匹配然后存储最高值的经验,所以我甚至不知道从哪里开始 查看我所了解内容的数据: 以下是诊断代码的数据 dz <-c("disease_1", "disease

我感兴趣的是在诊断代码列表中循环,如果值匹配,则使用先前计算的风险分数填充新变量,如果有多个匹配,则使用最高风险分数填充新变量

我希望采用原始数据集的长格式,为每个ID匹配具有最高风险分数的proc编号,并将proc编号和风险分数存储在单独的变量中

我有一些使用if循环在广泛数据中做类似事情的经验,但我不知道如何用这种方式来做。我没有匹配然后存储最高值的经验,所以我甚至不知道从哪里开始

查看我所了解内容的数据:

以下是诊断代码的数据

dz <-c("disease_1", "disease_2", "disease_3", "disease_4")
code <-c(124, 546, 890, 898)
risk_score <-c(10, 122, 45, 98)
df <-data.frame(dz, code, risk_score)

id是标识符,代码匹配是具有最高风险分数的代码,最高风险分数是风险分数的值(该id的最高值)。

我们将使用另一种方法创建这些数据帧:

data.frame(
  dz = c("disease_1", "disease_2", "disease_3", "disease_4"),
  code = as.character(c(124, 546, 890, 898)),
  risk_score = c(10, 122, 45, 98),
  stringsAsFactors = FALSE
) -> df

data.frame(
  id = c(1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5),
  proc = as.character(c(244, 546, 234, 345, 890, 123, 434, 634, 233, 345, 124, 234, 634, 546, 789, 890, 567, 124)),
  stringsAsFactors = FALSE
) -> data
这里有一种方法(在
tidyverse
和base R中)可以做到这一点:


你是对的,这是真的,因为我对那些代码不感兴趣。我正在处理的数据每个ID将有多个我不感兴趣的代码。正确,因为我不知道如何做。我想我感兴趣的输出示例可以说明我希望实现的目标。我不确定为什么今天所有的
-1
都是,但我把它打回了0。这有代码+数据并且是可复制的。这非常有效,并向我介绍了top_n(),谢谢。但是,我遇到了一个问题,一些id有多个实例,因为该id有一个相同的代码,并且多次列出了风险。如何在
tidyverse
方法代码的最后一行之后仅选择一个实例?请参阅更新。
切片(1)
应该可以工作。(我忘了在末尾添加一个
ungroup()
id<-c(1,2,3,4,5)
code_match<-c(546,890,124,546,890)
highest_risk_score <-c(122,45,10,122,45)
output_df<-data.frame(id, code_match, highest_risk_score)
  id code_match highest_risk_score
1  1        546                122
2  2        890                 45
3  3        124                 10
4  4        546                122
5  5        890                 45
data.frame(
  dz = c("disease_1", "disease_2", "disease_3", "disease_4"),
  code = as.character(c(124, 546, 890, 898)),
  risk_score = c(10, 122, 45, 98),
  stringsAsFactors = FALSE
) -> df

data.frame(
  id = c(1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5),
  proc = as.character(c(244, 546, 234, 345, 890, 123, 434, 634, 233, 345, 124, 234, 634, 546, 789, 890, 567, 124)),
  stringsAsFactors = FALSE
) -> data