我有以下数据框。
df <- data.frame(
Capture_Date = as.Date(c("2025-01-01", "2025-07-01", "2026-01-01", "2025-01-01", "2025-01-01",
"2025-07-01", "2025-01-01", "2025-07-01", "2025-01-01", "2025-07-01")),
Treatment = rep("ALL", 10),
Course = rep("Dixie", 10),
Trap = c("T30", "T30", "RT30", "T30", "T28", "T28", "T28", "T28", "T28", "T28"),
Band = c("803", "803", "803", "804", "807", "807", "808", "808", "809", "809"),
Sex = c("F", "F", "F", "M", "F", "F", "M", "M", "M", "M"),
Age = rep("J", 10),
Weight = c("152", "152", "152", "156", "152", "152", "139", "139", "156", "156"),
Frequency = c(151.571, 151.571, 151.571, 151.602, 151.16, 151.16, 151.149, 151.149, 151.24, 151.24),
Primary = rep("", 10),
Cause = c("", "", "censor", "LA", "", "LA", "", "UNK", "", "LA"),
Fate_Date = as.Date(c(NA, NA, "2026-07-01", "2025-06-01", NA, "2025-08-01", NA, "2025-09-01", NA, "2025-08-27"))
)
有时,单一动物会有多个捕获(每只动物的乐队都是唯一的),但 Cause 和 Fate_Date 只有一个条目。我正在尝试复制并粘贴 Cause 和 Fate_Date 列以填充每行的缺失数据,然后使用最旧的捕获日期进行子集化,以便它仅显示第一个捕获日期以及动物命运的日期和原因。我很难复制基于 Band 的 Cause 和 Fate_Date,看起来很简单,但我遇到了麻烦。
我尝试拉出最旧的条目,然后将其与原始数据框合并,但这不起作用,因为它只是创建了新列而不执行任何其他操作。我只需要根据 Band 列复制并粘贴 Cause 和 Fate_Date 列即可。
评论区已经回复了。整个游戏首先设置
""
值和NA
,然后应用fill
包中的tidyr
。
library(tidyverse)
df <- data.frame(
Capture_Date = as.Date(c("2025-01-01", "2025-07-01", "2026-01-01", "2025-01-01", "2025-01-01",
"2025-07-01", "2025-01-01", "2025-07-01", "2025-01-01", "2025-07-01")),
Treatment = rep("ALL", 10),
Course = rep("Dixie", 10),
Trap = c("T30", "T30", "RT30", "T30", "T28", "T28", "T28", "T28", "T28", "T28"),
Band = c("803", "803", "803", "804", "807", "807", "808", "808", "809", "809"),
Sex = c("F", "F", "F", "M", "F", "F", "M", "M", "M", "M"),
Age = rep("J", 10),
Weight = c("152", "152", "152", "156", "152", "152", "139", "139", "156", "156"),
Frequency = c(151.571, 151.571, 151.571, 151.602, 151.16, 151.16, 151.149, 151.149, 151.24, 151.24),
Primary = rep("", 10),
Cause = c("", "", "censor", "LA", "", "LA", "", "UNK", "", "LA"),
Fate_Date = as.Date(c(NA, NA, "2026-07-01", "2025-06-01", NA, "2025-08-01", NA, "2025-09-01", NA, "2025-08-27"))
)
filled_df <- df |> mutate(Cause = ifelse(Cause == "", NA, Cause)) |>
group_by(Band) |>
fill(Cause, Fate_Date, .direction = "downup") |>
ungroup()
filled_df |> select(Band, Cause, Fate_Date)
#> # A tibble: 10 × 3
#> Band Cause Fate_Date
#> <chr> <chr> <date>
#> 1 803 censor 2026-07-01
#> 2 803 censor 2026-07-01
#> 3 803 censor 2026-07-01
#> 4 804 LA 2025-06-01
#> 5 807 LA 2025-08-01
#> 6 807 LA 2025-08-01
#> 7 808 UNK 2025-09-01
#> 8 808 UNK 2025-09-01
#> 9 809 LA 2025-08-27
#> 10 809 LA 2025-08-27
创建于 2024-05-13,使用 reprex v2.1.0