R 组合缺少值的字符串

R 组合缺少值的字符串,r,data-manipulation,R,Data Manipulation,这是我的样本数据 index <- c(1,2,3,4,5,6,7,8,9,10) a <- c('a','b','c',NA,'D','e',NA,'g','h','i') data <- data.frame(index,a) 我尝试使用grepl函数,但它似乎无法处理基本R中缺少值的数据: data$res <- as.character(data$a) data$res[! data$a %in% c("a","b") & !is.na(data$a)]

这是我的样本数据

index <- c(1,2,3,4,5,6,7,8,9,10)
a <- c('a','b','c',NA,'D','e',NA,'g','h','i')
data <- data.frame(index,a)
我尝试使用grepl函数,但它似乎无法处理基本R中缺少值的数据:

data$res <- as.character(data$a)
data$res[! data$a %in% c("a","b") & !is.na(data$a)] <- "Other"
data
#    index    a   res
# 1      1    a     a
# 2      2    b     b
# 3      3    c Other
# 4      4 <NA>  <NA>
# 5      5    D Other
# 6      6    e Other
# 7      7 <NA>  <NA>
# 8      8    g Other
# 9      9    h Other
# 10    10    i Other
基本R中的数据$res:

data$res <- as.character(data$a)
data$res[! data$a %in% c("a","b") & !is.na(data$a)] <- "Other"
data
#    index    a   res
# 1      1    a     a
# 2      2    b     b
# 3      3    c Other
# 4      4 <NA>  <NA>
# 5      5    D Other
# 6      6    e Other
# 7      7 <NA>  <NA>
# 8      8    g Other
# 9      9    h Other
# 10    10    i Other

data$res使用
dplyr
及其
recode
功能,您可以

data %>% mutate(name=recode(a, a="a", b="b", .default="other"))
#    index    a  name
# 1      1    a     a
# 2      2    b     b
# 3      3    c other
# 4      4 <NA>  <NA>
# 5      5    D other
# 6      6    e other
# 7      7 <NA>  <NA>
# 8      8    g other
# 9      9    h other
# 10    10    i other

使用
dplyr
及其
recode
功能,您可以

data %>% mutate(name=recode(a, a="a", b="b", .default="other"))
#    index    a  name
# 1      1    a     a
# 2      2    b     b
# 3      3    c other
# 4      4 <NA>  <NA>
# 5      5    D other
# 6      6    e other
# 7      7 <NA>  <NA>
# 8      8    g other
# 9      9    h other
# 10    10    i other

ifelse(!greplt('(a | b'),data$a)和!is.na(data$a),'others',data$name)
I收到错误:替换长度为零
ifelse(!greplt('(a | b'),data$a)和!is.na(data$a),'others',as.character(data$a))
ifelse(!greplt('(a | b'),data$a)和!is.na(data$a),'others',data$name)
我收到错误:替换的长度为零
ifelse(!grepl('(a | b'),数据$a)和!is.na(数据$a),'others',as.character(数据$a))
谢谢。我需要将c、d、e、f、h、I标记为“其他”,而NA保留为NAThanks。我需要将c、d、e、f、h、I标记为“其他”,而NA保留为NA