我正在尝试学习tidyverse的处理方式,我想知道是否存在使用tidyverse函数的方式将向量中的多个值重新编码为单个值而没有所有冗余。例如,使用以下标记作为一个非常通用的示例,是否有办法消除重复使用='lower'和='upper'?我认为会有一个明显的解决方案,但我找不到。
library(tidyverse)
T <- tibble(C1 = c('a','A','b','c','B','g','r'))
T
T %>%
mutate(case = recode(C1, 'a' = 'lower', 'A' = 'upper', 'b' = 'lower', 'c'
= 'lower', 'B' = 'upper', 'g' = 'lower', 'r' = 'lower'))
基本R解决方案:
DF <- data.frame(C1 = c('a','A','b','c','B','g','r'), stringsAsFactors =
FALSE)
DF$case <- character(length = nrow(DF))
DF[DF$C1 %in% c('a','b','c','g','r'), ]$case <- 'lower'
DF[DF$C1 %in% c('A','B'), ]$case <- 'upper'
答案 0 :(得分:0)
使用str_detect
创建一个逻辑索引,然后将其更改为所需的类别
library(tidyverse)
T %>%
mutate(case = c('upper', 'lower')[str_detect(C1, '^[a-z]+$')+ 1])
如果只有单个字母,则对内置的字母向量%in%
或letters
使用LETTERS
T %>%
mutate(case = ifelse(C1 %in% letters, 'lower', 'upper'))