gpt4 book ai didi

r - 对于每个唯一的 ID,我只想根据另一个字段的排名有一行

转载 作者:行者123 更新时间:2023-12-02 09:07:18 24 4
gpt4 key购买 nike

最终,我希望创建一个表,其中包含数据集中的每个唯一 ID 以及相应的字段(基于该字段的“排名”)。

我一直在这一步上陷入困境。我考虑过对每个唯一 ID 进行循环,但想看看是否有更简单的方法。也许 apply 函数系列会有所帮助。我也不确定对不同字符串值进行排名的方法(例如,TRUE > FALSE > NA)。

下面是我正在查看的内容的一个小示例,仅包含感兴趣的两个字段:

df1 <- data.frame(ID = c(1,1,2,2,3,3,3,4,4,5,6,7,7), flag = c("NA", "TRUE", "NA", "FALSE", "TRUE", "TRUE", "FALSE", "NA", "NA", "NA", "TRUE", "FALSE", "FALSE"))

对于每个 ID:

  • 如果标志字段中至少有一个“TRUE”,我想提取整行之一(无论是哪一行)。
  • 如果 ID 的标志字段中不包含“TRUE”值,但至少有一行包含“FALSE”,则我想提取其中一整行。
  • 如果 ID 的标志字段中没有“TRUE”或“FALSE”值,我仍然需要“NA”行之一。

下面是我理想中想要的单独的数据框:

ideal.df <- data.frame(ID = c(1,2,3,4,5,6,7), flag = c("TRUE", "FALSE", "TRUE", "NA", "NA", "TRUE", "FALSE"))

预先感谢您的帮助!

最佳答案

一个选项是使用 slicematch

library(dplyr)
df1 %>%
group_by(ID) %>%
slice(which.max(match(flag, c("NA", "TRUE", "FALSE"))))
# A tibble: 7 x 2
# Groups: ID [7]
# ID flag
# <dbl> <fct>
#1 1 TRUE
#2 2 FALSE
#3 3 FALSE
#4 4 NA
#5 5 NA
#6 6 TRUE
#7 7 FALSE

或者在逻辑“标志”列上使用rankwhich.min

df1 %>% 
group_by(ID) %>%
slice(which.min(rank(as.logical(flag)) ))
# A tibble: 7 x 2
# Groups: ID [7]
# ID flag
# <dbl> <fct>
#1 1 TRUE
#2 2 FALSE
#3 3 FALSE
#4 4 NA
#5 5 NA
#6 6 TRUE
#7 7 FALSE

关于r - 对于每个唯一的 ID,我只想根据另一个字段的排名有一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56529741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com