gpt4 book ai didi

根据存在层次结构的另一列删除一列中的重复项

转载 作者:行者123 更新时间:2023-12-01 01:22:51 25 4
gpt4 key购买 nike

我有一个像这样的数据框:

dat1 <- data.frame(Unit = c("a","a","b","c","c","c","d"), Habitat = c("choppy sands","sands","meadow","sands","meadow","choppy sands","choppy sands"), Litter = c(3.7,3.4,5.6,2.1,3.6,7.5,1.2))

>dat1
Unit Habitat Litter
1 a choppy sands 3.7
2 a sands 3.4
3 b meadow 5.6
4 c sands 2.1
5 c meadow 3.6
6 c choppy sands 7.5
7 d choppy sands 1.2

我想根据 Unit 查找并删除重复行,其中为每个 Unit 值保留的单行取决于 Habitat 中值的层次结构。如果基于单位存在重复行,则 Habitat =“meadow”的行优先,然后是 Habitat =“choppy sands”的行,然后是 Habitat =“sands”的行。因此生成的数据框将如下所示:

  Unit      Habitat Litter
1 a choppy sands 3.7
2 b meadow 5.6
3 c meadow 3.6
4 d choppy sands 1.2

非常感谢任何帮助。

最佳答案

使用dplyrforcats(都在tidyverse包系统中),你可以做这样的事情:

dat2 <- 
dat1 %>%
mutate(Habitat = fct_relevel(Habitat, c('meadow', 'choppy sands', 'sands'), after=0L)) %>%
group_by(Unit) %>%
filter(as.numeric(Habitat) == min(as.numeric(Habitat)))

这给出了所需的输出。这个想法是,您将Habitat设为一个因子变量,并在此变量的级别中对您的层次结构进行编码。然后,(在每个 Unit 组内),通过使用 as.numeric(Habitat) == min( 进行过滤,保留具有最高优先级 Habitat 的行as.numeric(Habitat)) 规则。

关于根据存在层次结构的另一列删除一列中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59183960/

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