R 匹配函数与条件
R match function with conditions
我有一个数据帧 (Df1) 需要用第二个数据帧 (Df2) 进行更新。
如果在 Df2 中找到“Bird.ID”,则“Status”列在 Df1 中采用“Alive”状态(通过匹配 ID)
Df1$Status[match(Df2$Bird.ID, Df1$ID)] <- "Alive"
问题是在 Df1 中,“状态”列可以有“死”值(死鸟应该保持死状态)。
我想找到一种方法来修复“死”状态并使用匹配功能,但如果它已经死了,它仍然是死的。换句话说,我想在“Status”不等于“Dead”的所有行上的这个数据框上应用匹配函数(或任何可以完成相同工作的类似函数)。
好吧,如果您分享一个小但可重现的数据示例,会更容易提供帮助。我创建了一个示例数据集来演示解决方案。
先上数据
Df1 <- data.frame(ID = 1:5,
Status = c('Injured', 'Dead', 'Dead', 'Alive', 'Injured'))
Df2 <- data.frame(Bird.ID = c(1, 3, 5))
Df1
# ID Status
#1 1 Injured
#2 2 Dead
#3 3 Dead
#4 4 Alive
#5 5 Injured
Df2
# Bird.ID
#1 1
#2 3
#3 5
解决方案-
Df1$Status[Df1$ID %in% Df2$Bird.ID & Df1$Status != "Dead"] <- 'Alive'
Df1
# ID Status
#1 1 Alive
#2 2 Dead
#3 3 Dead
#4 4 Alive
#5 5 Alive
使用@rvx:数据帧和Tidyverse()
library(tidyverse)
Df1 <- data.frame(ID = 1:5,
Status = c('Injured', 'Dead', 'Dead', 'Alive', 'Injured'))
Df2 <- data.frame(Bird.ID = c(1, 3, 5))
Df1 <- Df1 %>%
mutate(Status = ifelse(ID %in% Df2$Bird.ID & Status != "Dead", "Alive", Status))
我有一个数据帧 (Df1) 需要用第二个数据帧 (Df2) 进行更新。
如果在 Df2 中找到“Bird.ID”,则“Status”列在 Df1 中采用“Alive”状态(通过匹配 ID)
Df1$Status[match(Df2$Bird.ID, Df1$ID)] <- "Alive"
问题是在 Df1 中,“状态”列可以有“死”值(死鸟应该保持死状态)。
我想找到一种方法来修复“死”状态并使用匹配功能,但如果它已经死了,它仍然是死的。换句话说,我想在“Status”不等于“Dead”的所有行上的这个数据框上应用匹配函数(或任何可以完成相同工作的类似函数)。
好吧,如果您分享一个小但可重现的数据示例,会更容易提供帮助。我创建了一个示例数据集来演示解决方案。
先上数据
Df1 <- data.frame(ID = 1:5,
Status = c('Injured', 'Dead', 'Dead', 'Alive', 'Injured'))
Df2 <- data.frame(Bird.ID = c(1, 3, 5))
Df1
# ID Status
#1 1 Injured
#2 2 Dead
#3 3 Dead
#4 4 Alive
#5 5 Injured
Df2
# Bird.ID
#1 1
#2 3
#3 5
解决方案-
Df1$Status[Df1$ID %in% Df2$Bird.ID & Df1$Status != "Dead"] <- 'Alive'
Df1
# ID Status
#1 1 Alive
#2 2 Dead
#3 3 Dead
#4 4 Alive
#5 5 Alive
使用@rvx:数据帧和Tidyverse()
library(tidyverse)
Df1 <- data.frame(ID = 1:5,
Status = c('Injured', 'Dead', 'Dead', 'Alive', 'Injured'))
Df2 <- data.frame(Bird.ID = c(1, 3, 5))
Df1 <- Df1 %>%
mutate(Status = ifelse(ID %in% Df2$Bird.ID & Status != "Dead", "Alive", Status))