R语言 根据单独级别内的计数创建条件因子

qnyhuwrf  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(135)

我有一个我认为相对简单的问题,我有一个很大的数据集,其中有数千个来自不同地点不同区域的观测数据,一般结构如下:

df <- data.frame(Site = as.factor(rep(c("Site.A","Site.B","Site.C"), 5)),
                   Response = as.numeric(runif(15, 0, 10)),
                   Habitat = as.factor(c("G","G","F","G","F",
                                         "F","F","F","G","S",
                                         "S", "S", "S","S","S")))

我想增加一栏,根据每个地点的栖息地数量确定每个地点的主要栖息地(即每个地点内大多数观察结果的栖息地)。
这应该是相对容易的东西沿着线:

dat %>%
  group_by(Site) %>%
  mutate(Dominant_Habitat = if_else(
    (count(Habitat == "G") >=3, "G",
    (count(Habitat == "F") >= 3, "F", "S"))

但我一辈子都找不到办法让它工作。谢谢,

km0tfn4u

km0tfn4u1#

您可以将countslice作为每个Site中出现频率最高的Habitat(可能有联系),然后联接回初始数据集。

library(dplyr)

df %>%
  count(Site, Habitat) %>%
  group_by(Site) %>%
  slice_max(n) %>%
  summarise(Dominant_Habitat = paste(Habitat, collapse = '/')) %>%
  left_join(df, ., by = "Site")

     Site  Response Habitat Dominant_Habitat
1  Site.A 2.6751221       G              G/S
2  Site.B 7.0941244       G              F/S
3  Site.C 3.3727804       F              F/S
4  Site.A 2.4453809       G              G/S
5  Site.B 2.0155192       F              F/S
6  Site.C 6.8103549       F              F/S
7  Site.A 9.5722247       F              G/S
8  Site.B 8.7405261       F              F/S
9  Site.C 1.0035530       G              F/S
10 Site.A 4.5928348       S              G/S
11 Site.B 5.6210020       S              F/S
12 Site.C 8.2221709       S              F/S
13 Site.A 0.3368293       S              G/S
14 Site.B 0.4153831       S              F/S
15 Site.C 6.0440495       S              F/S

相关问题