基于R中的多个条件对第一行重复数据进行子集化



我有重复的随机人的种族数据行,其中包含指定种族的日期。基于这些条件,我只想为每个人分配一个种族类别(白人、亚裔、黑人、其他人、混血(:(1(如果一个人有多个种族,那么将分配最常见的一个(最高种族_n(。(2( 如果患者具有相同数量的多个种族(例如,1个混血、1个亚洲人、1个其他人(,则将分配最近的一个。我以一种方式组织我的数据,这样我就可以统计每个患者的每个种族,并编写代码,按降序排列种族日期。然而,当我运行代码来获得组织表的第一行时,我最终会为每个人随机分配种族。

42017年9月4日[/tr>42019年9月4日12018年9月4日12017年9月4日2016年9月4日2015年9月4日
种族 种族日期
1 白色 2019年9月4日
1 白色 2018年9月4日
1 白色
1 白色2016年9月4日
1 其他 1 2015年9月4日
2 亚洲 1
2 其他
2 混合
3 黑色 2
3 黑色 2

您的主要问题是ethnicity_date是一个字符向量,而不是Date

我假设它是月-月-年格式,但如果是日-月-月格式,你可以将format = "%m/%d/%Y"更改为format = "%d/%m/%Y"

请注意,由于我们对ethnicity_dateethnicity_n使用max()函数,因此没有必要先按顺序arrange()数据。如果任一列中都有NA值,则需要向max()函数提供na.rm=TRUE

df |>
mutate(
ethnicity_date = as.Date(
ethnicity_date,
format = "%m/%d/%Y"
)
) |>
group_by(person) |>
filter(
ethnicity_n == max(ethnicity_n)
) |>
filter(
ethnicity_date == max(ethnicity_date)
) |>
slice(1L) # in case there are still ties
# # A tibble: 3 x 4
# # Groups:   person [3]
#   person ethnicity ethnicity_n ethnicity_date
#    <int> <chr>           <int> <date>
# 1      1 white               4 2019-04-09
# 2      2 asian               1 2019-04-09
# 3      3 black               2 2016-04-09 

我把你的slice(1L)放在最后,以防有一个人有多行具有相同的ethnicity_nethnicity_date,但如果你想在这种情况下保留这两行,你可以删除它。

EDIT:感谢您添加一个示例数据集,这要容易得多。

我认为slice_max()正是您想要的,请参阅下文。最好先正确格式化日期

library(dplyr)
df %>%
mutate(ethnicity_date = as.Date(ethnicity_date, format = "%d/%m/%Y")) %>% 
group_by(person) %>% 
slice_max(ethnicity_n) %>% 
slice_max(ethnicity_date) %>% 
ungroup()
# A tibble: 3 × 4
# person ethnicity ethnicity_n ethnicity_date
# <int> <chr>           <int> <date>        
# 1      1 white               4 2019-09-04    
# 2      2 asian               1 2019-09-04    
# 3      3 black               2 2016-09-04  

相关内容

  • 没有找到相关文章

最新更新