我目前正在从事一个项目,我试图根据养蜂人的观察来计算多个蜂巢中蜂王的年龄。他们通常用一种颜色标记女王,如果/当女王去世时,他们会再次标记她。所以在我的表格中你可以看到这样的数据形式
Colony month Queen_status
11 24-02 Not seen
11 24-03 Queen marked
11 24-04 Queen marked
11 24-05 Queen marked
11 24-06 Queen marked
12 24-02 Queen marked
12 24-03 Queen marked
12 24-04 New queen marked the day of the visite
12 24-05 Queen marked
12 24-06 Queen marked
根据蜜蜂背部的颜色,我们可以估算出研究时的“初始年龄”。我想创建一个名为“女王年龄”的值,该值每月增加 1,但如果 queen_status 是“新女王标记了访问者的日期”,则必须重置为零。 这是我想象的桌子:
Colony month Queen_status Initale age of queen Relatif_age Actual age
11 24-02 Queen marked 25 1 26
11 24-03 Queen marked 25 2 27
11 24-04 Queen marked 25 3 28
11 24-05 Queen marked 25 4 29
11 24-06 Queen marked 25 5 30
12 24-02 Queen marked 30 1 31
12 24-03 Queen marked 30 2 32
12 24-04 New queen 30 1 1
12 24-05 Queen marked 30 2 2
12 24-06 Queen marked 30 3 3
我无法让它发挥作用。我最后的努力如下
df <- df %>%
mutate(Colony = as.factor(Colony)) %>%
group_by(Colony) %>%
summarize(
month = month,
Queen status = Queen status,
Relative age = ifelse(month == min(month) & Queen status != "New queen", 1, with(df, ave(Queen status, cumsum(Statut_de_la_reine == Queen status "), FUN = seq_along))))
我也尝试过 case_when 但我无法让它工作
理想情况下,我只想要数据框中的最后一列。
使用 data.table 包非常简单:
library(data.table)
DT <- fread('Colony month Queen_status "Initale age of queen" Relatif_age "Actual age"
11 24-02 "Queen marked" 25 1 26
11 24-03 "Queen marked" 25 2 27
11 24-04 "Queen marked" 25 3 28
11 24-05 "Queen marked" 25 4 29
11 24-06 "Queen marked" 25 5 30
12 24-02 "Queen marked" 30 1 31
12 24-03 "Queen marked" 30 2 32
12 24-04 "New queen" 30 1 1
12 24-05 "Queen marked" 30 2 2
12 24-06 "Queen marked" 30 3 3')
setDT(DT)
DT[, Relatif_age_1 := rowid(Colony, cumsum(Queen_status == "New queen"))]
DT[, Actual_age_1 := fifelse(cumsum(Queen_status == "New queen") == 0,
`Initale age of queen`,
0) + Relatif_age_1, by = Colony]
# Colony month Queen_status Initale age of queen Relatif_age Actual age Relatif_age_1 Actual_age_1
# <int> <char> <char> <int> <int> <int> <int> <num>
# 1: 11 24-02 Queen marked 25 1 26 1 26
# 2: 11 24-03 Queen marked 25 2 27 2 27
# 3: 11 24-04 Queen marked 25 3 28 3 28
# 4: 11 24-05 Queen marked 25 4 29 4 29
# 5: 11 24-06 Queen marked 25 5 30 5 30
# 6: 12 24-02 Queen marked 30 1 31 1 31
# 7: 12 24-03 Queen marked 30 2 32 2 32
# 8: 12 24-04 New queen 30 1 1 1 1
# 9: 12 24-05 Queen marked 30 2 2 2 2
# 10: 12 24-06 Queen marked 30 3 3 3 3