r:如果指示变量为 1,则将“*”添加到因子水平

r: add "*" to factor level if indicator variable is 1

我有类似下面的数据设置。

library(tidyverse)  
library(dplyr)


factors <- c("a","b","c","d")
indicator=c(1,0,1,0)
data <- as_tibble(cbind(factors,indicator))
data$factors <- as.factor(data$factors)

我想在指标变量等于 1 的所有行的因子水平上附加一个星号。指标值永远不会在给定的因子值内变化。也就是说,对于因子等于“a”的所有观察值,指标始终为 1。

# A tibble: 4 x 2
  factors indicator
  <chr>   <chr>    
1 a*      1        
2 b       0        
3 c*      1        
4 d       0        

最好的方法是什么?

我们可以使用 ifelse/case_when 中的逻辑条件到 paste * 中的那些值 'factors' 对应于 'indicator' 值 1

library(dplyr)
library(stringr)
data %>% 
   mutate(factors = case_when(indicator == 1 ~ 
     str_c(as.character(factors), "*"), TRUE ~ as.character(factors)))

-输出

# A tibble: 4 x 2
  factors indicator
  <chr>   <chr>    
1 a*      1        
2 b       0        
3 c*      1        
4 d       0        

这应该有效:

data %>%
  mutate(factors = ifelse(indicator==1, paste0(factors, "*"), factors))
# A tibble: 4 x 2
  factors indicator
  <chr>   <chr>    
1 a*      1        
2 2       0        
3 c*      1        
4 4       0