是否可以在 R 中使用 ifelse() 添加第三个虚拟变量?

Is it possible to add a third dummy variable using ifelse() in R?

我正在使用此代码创建一个新的组列,该列基于在 2 个组 SuiSwe 的列 var 中找到的部分字符串。我不得不添加另一个组 TRD,并且我一直在尝试调整 ifelse 函数来执行此操作,但没有成功。这可行吗?是否有任何其他解决方案或其他功能可以帮助我做到这一点?

m.df <- molten.df%>% mutate(
Group = ifelse(str_detect(variable, "Sui"), "Sui", "Swedish"))

Current m.df: 
                          var      value    
  ADHD_iFullSuiTrim.Threshold1 0.00549427     
  ADHD_iFullSuiTrim.Threshold1 0.00513955     
  ADHD_iFullSweTrim.Threshold1 0.00466352   
  ADHD_iFullSweTrim.Threshold1 0.00491633   
  ADHD_iFullTRDTrim.Threshold1 0.00658535    
  ADHD_iFullTRDTrim.Threshold1 0.00609122    


Desired Result:
                          var      value    Group
   ADHD_iFullSuiTrim.Threshold1 0.00549427    Sui  
   ADHD_iFullSuiTrim.Threshold1 0.00513955    Sui  
   ADHD_iFullSweTrim.Threshold1 0.00466352   Swedish
   ADHD_iFullSweTrim.Threshold1 0.00491633   Swedish
   ADHD_iFullTRDTrim.Threshold1 0.00658535    TRD
   ADHD_iFullTRDTrim.Threshold1 0.00609122    TRD  

任何帮助或建议将不胜感激,即使结果可以使用其他功能来完成。

不需要ifelse()。我会使用 Group = str_extract(var, pattern = "(Sui)|(TRD)|(Swe)").

您可以使用 "iFull" 的后视和 "Trim" 的前视来做更高级的正则表达式,但我永远不记得该怎么做。

有点迂回,但一般来说,如果你想要 "iFull" 和 "Trim" 之间的任何东西都可以替代:

str_replace_all(var, pattern = "(.*iFull)|(Trim.*)", "")

尝试使用多个ifelse

library(dplyr)
library(stringr)

m.df <- molten.df %>% 
  mutate(Group = ifelse(str_detect(var, "Sui"), "Sui", 
                        ifelse(str_detect(var, "Swe"), "Swedish", "TRD")))

case_when

m.df <- molten.df %>% 
  mutate(Group = case_when(
    str_detect(var, "Sui") ~ "Sui",
    str_detect(var, "Swe") ~ "Swe",
    TRUE                   ~ "TRD"
  ))

数据准备

molten.df <- read.table(text = "var      value    
  'ADHD_iFullSuiTrim.Threshold1' 0.00549427     
                 'ADHD_iFullSuiTrim.Threshold1' 0.00513955     
                 'ADHD_iFullSweTrim.Threshold1' 0.00466352   
                 'ADHD_iFullSweTrim.Threshold1' 0.00491633   
                 'ADHD_iFullTRDTrim.Threshold1' 0.00658535    
                 'ADHD_iFullTRDTrim.Threshold1' 0.00609122",
                header = TRUE, stringsAsFactors = FALSE)

供将来参考 - 提供重复分析所需的所有组件,例如包和示例数据

# load ----
library(dplyr)
library(stringr)

# data ----
 df=data.frame(var=c('ADHD_iFullSuiTrim.Threshold1',
  'ADHD_iFullSuiTrim.Threshold1',
  'ADHD_iFullSweTrim.Threshold1',
  'ADHD_iFullSweTrim.Threshold1',
  'ADHD_iFullTRDTrim.Threshold1', 
  'ADHD_iFullTRDTrim.Threshold1'),
   value = c(0.00549427, 0.00513955, 0.00466352, 0.00491633, 0.00658535, 0.00609122))    

df %>% 
    mutate(Group = case_when(str_detect(var, "Sui")~"Sui",
                                 str_detect(var, "Swe")~"Swedish",
                                 str_detect(var, "TRD")~"TRD"))