首页 > 解决方案 > 基于另一列中的变量填充 R [使用 if 语句?] 中的一列

问题描述

我正在努力解决的一个看似简单的任务:

我收集了行为数据并有一列(“行为”),我在其中记录了正在发生的行为。我想将这些行为分组并用类别名称填写一列(“BehaviorGroup”)。

这看起来如何的一个例子:

Behavior      BehaviorGroup
bite          aggressive contact
ram           aggressive contact
avoid         avoid
fast-approach aggressive approach
flee          avoid
fast-approach aggressive approach

etc. 

所以我想使用 Behavior 列下列出的行为(我已经有)来根据类别填写 BehaviorGroup 列(当前为空)。

对于上面的例子:“bite”和“ram”是“aggressive contact”,“avoid”和“flee”是“avoid”,“fast-approach”是“aggressive approach”

我还有很多,但我希望这足以开始如何处理代码来做到这一点!我将不胜感激任何和所有的帮助!

根据给出的示例,这是我将使用的代码:

Behavior <- c("bite", "ram", "avoid", "fast-approach", "flee", "fast-approach")
BehaviorGroup <- c("NA", "NA", "NA", "NA", "NA", "NA")
data.frame(Behavior,BehaviorGroup)

我只是想填写 BehaviorGroup 列。先感谢您!

标签: rif-statementrename

解决方案


使用case_when来自dplyr

library(tidyverse)
df %>% 
  mutate_if(is.factor, as.character) %>% 
  mutate(BehaviorGroup = case_when(Behavior %in% c("bite", "ram") ~ "aggressive contact",
                                   Behavior %in% c("avoid", "flee") ~ "flee",
                                   Behavior %in% c("fast-approach") ~ "aggressive approach"))

       Behavior       BehaviorGroup
1          bite  aggressive contact
2           ram  aggressive contact
3         avoid                flee
4 fast-approach aggressive approach
5          flee                flee
6 fast-approach aggressive approach

或者如果你喜欢baseifelse

df$BehaviorGroup <-ifelse(df$Behavior %in% c("bite", "ram"), "aggressive contact", NA)
df$BehaviorGroup[is.na(df$BehaviorGroup) == TRUE] <-ifelse(df$Behavior[is.na(df$BehaviorGroup) == TRUE] %in% c("avoid", "flee"), "flee", NA)
df$BehaviorGroup[is.na(df$BehaviorGroup) == TRUE] <-ifelse(df$Behavior[is.na(df$BehaviorGroup) == TRUE] %in% c("fast-approach"), "aggressive approach", NA)

df
       Behavior       BehaviorGroup
1          bite  aggressive contact
2           ram  aggressive contact
3         avoid                flee
4 fast-approach aggressive approach
5          flee                flee
6 fast-approach aggressive approach

推荐阅读