根据另一列中的变量在R中填充一列[使用if语句?]
我正在努力完成一项看似简单的任务: 我收集了行为数据,并有一个专栏(“行为”),其中记录了正在发生的行为。我想将这些行为分组,并用类别名称填写一列(“BehaviorGroup”) 下面是一个可能的示例:根据另一列中的变量在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
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"