从两列复制数据并根据 R 中的 Band # 粘贴到同一列中

问题描述 投票:0回答:1

我有以下数据框。

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 列即可。

r dplyr
1个回答
0
投票

评论区已经回复了。整个游戏首先设置

""
值和
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

© www.soinside.com 2019 - 2024. All rights reserved.