簡體   English   中英

在R中嵌套if else語句

[英]Nested if else statement in R

我有一個變量x

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

如果x具有字符ds,則b = 0,否則x具有字符fg,則b = 1,否則x如果具有字符bc,則b = 2。

我在數據集中有這個變量,大約有100條記錄(在示例中我只給出了4條)。

每當我們看到變量X中可用的字符串時,我只是在創建一個新的變量b。我的意思是它需要搜索我提到的變量X的每一行的字符,並根據該值為變量b賦值

如果我們需要根據查找的匹配數創建任意組,則可以嘗試以下操作:

# 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

這應該工作:

b<-rep(NA,length(x))

index<-grepl("ds", x)
b[index]<-rep(0,sum(index))

index_temp<-grepl("fg", x)
index<-((index_temp)*1+(is.na(b))*1)==2
b[index]<-rep(1,sum(index))

index_temp<-grepl("bc", x)
index<-((index_temp)*1+(is.na(b))*1)==2
b[index]<-rep(2,sum(index))

尚未完全確信該解決方案,但您可以嘗試以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM