根据另一列中的变量在R中填充一列[使用if语句?]

根据另一列中的变量在R中填充一列[使用if语句?],r,if-statement,rename,R,If Statement,Rename,我正在努力完成一项看似简单的任务: 我收集了行为数据,并有一个专栏(“行为”),其中记录了正在发生的行为。我想将这些行为分组,并用类别名称填写一列(“BehaviorGroup”) 下面是一个可能的示例: Behavior BehaviorGroup bite aggressive contact ram aggressive contact avoid avoid fast-approach aggressive approach

我正在努力完成一项看似简单的任务:

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

下面是一个可能的示例:

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

etc. 
因此,我想使用Behavior列下列出的行为(我已经有了)来根据类别填充BehaviorGroup列(当前为空)

对于上述示例: “咬”和“公羊”是“攻击性接触”, “避免”和“逃离”是“避免”,并且 “快速接近”是“积极接近”

我还有很多,但我希望这足以让我开始学习如何处理代码! 我将非常感谢任何和所有的帮助

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

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

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
或者如果您喜欢
base
ifelse

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
基本r中的df$BehaviorGroup代码:

d <- data.frame(Behavior,BehaviorGroup, stringsAsFactors = F)

d$BehaviorGroup[grepl("bite|ram", d$Behavior)] <- "agressive"

       Behavior BehaviorGroup
1          bite     agressive
2           ram     agressive
3         avoid            NA
4 fast-approach            NA
5          flee            NA
6 fast-approach            NA

d太棒了!!!由于某种原因,我无法让tidyverse安装,因此我可能必须对其进行故障排除,但ifelse代码工作正常,因此我可以将其应用于我的其余数据。非常感谢你!!!
d$BehaviorGroup[grepl("^bite$|^ram$", d$Behavior)] <- "agressive"