我有一个这样的数据框
X <- data.frame(value = c(1,2,3,4,5,6),
variable = c("AA", "ab", "BB", "ad", "da", "DD"))
我试图在所有变量上有条件地为字符添加前缀,以使结果数据帧如下所示(当我们使用大写字母时添加G前缀,当我们使用小写字母时添加M前缀)
1 GAA
2 Mab
3 GBB
4 Mad
5 Mda
6 GDD
我试图编写一个函数来实现如下所示
prefix <- function(raw_data)
{
if(raw_data$Members %like% "^[a-z]") {
raw_data$Members = paste0('M', raw_data$Members)
}
else {if(raw_data$Members %like% "^[A-Z]")
{
raw_data$Members = paste0('G', raw_data$Members)
}
}
}
它只是前缀G或仅前缀M。请帮助我确定此功能出了什么问题,或者是否有更好的方法来实现此目的。
答案 0 :(得分:4)
使用$('select[name="myselect"]').select2('data')[0].customparam
和ifelse
检查元素是否以小写字母开头。
grepl
答案 1 :(得分:4)
检查变量的tolower
版本是否等于原始版本,并使用结果为带有“ G”和“ M”的向量建立索引:
paste0(c("G", "M")[(X$variable == tolower(X$variable)) + 1], X$variable)
# [1] "GAA" "Mab" "GBB" "Mad" "Mda" "GDD"
答案 2 :(得分:1)
另一种选择是使用sub
。在这种情况下,可能不是最好的解决方案,但是它是“ R中的条件字符串前缀”的更通用的解决方案。
X$variable <- sub('(?=^[A-Z])', 'G', X$variable, perl = T)
X$variable <- sub('(?=^[a-z])', 'M', X$variable, perl = T)
X
# value variable
# 1 1 GAA
# 2 2 Mab
# 3 3 GBB
# 4 4 Mad
# 5 5 Mda
# 6 6 GDD
Tidyverse等效项
library(tidyverse)
X %>%
mutate_at('variable', ~ str_replace(., '(?=^[A-Z])', 'G') %>%
str_replace('(?=^[a-z])', 'M'))