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
我有类似下面的数据设置。
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