在R中嵌套if else语句

时间:2016-05-10 10:38:17

标签: r

我有变量x

x <- c("adsad", "assdf", "gfdfg", "vbcvb")

如果x具有字符ds,则b = 0 elseif x具有字符fg,则b = 1 elseif x具有字符bc,则b = 2.

我在数据集中有这个变量,大约有100个(我在示例中只给出了4个)记录。

每当我们在变量X中看到这些字符串时,我只是创建一个新变量b。我的意思是它需要搜索我提到的变量X的每一行的字符,并根据该值赋值变量b < / p>

3 个答案:

答案 0 :(得分:2)

如果我们需要根据查找的匹配数创建任意组,那么我们可以试试这个:

# data
x <- c("adsad", "assdf", "gfdfg", "vbcvb", "dsXXfg", "xxdsbc", "dsfgbc")

# lookup list
lookup <- c("ds", "fg", "bc")

#result
data.frame(x = x,
           group = 
             order(
               apply(sapply(lookup, function(i) grepl(i, x) * 1), 1,
                     paste, collapse = "")
               )
           )

#        x group
# 1  adsad     2
# 2  assdf     4
# 3  gfdfg     3
# 4  vbcvb     1
# 5 dsXXfg     6
# 6 xxdsbc     5
# 7 dsfgbc     7

答案 1 :(得分:0)

这应该有效:

application

答案 2 :(得分:0)

不完全相信解决方案,但您可以尝试以下方法:

x <- c("adsad", "assdf", "gfdfg", "vbcvb","dsfgbc","agdsfg","dsbc","fgbc")

grepl("ds",x)*1 + grepl("fg",x)*3 + grepl("bc",x)*5
[1] 1 0 3 5 9 4 6 8

虽然数字应代表每个独特的组合,例如

1 == ds
3 == fg
5 == bc
4 == ds & fg
6 == ds & bc
9 == ds & fg & bc
8 == fg & bc

这是有效的,因为如果需要,逻辑向量被强制转换为数字向量。所以TRUE == 1FALSE == 0