簡體   English   中英

R如何使用ifelse函數應用來搜索多列的字符串值?

[英]R How to use apply with ifelse function to search for string values over many columns?

我知道有很多類似的問題,但是無法解決這個問題。

我想要一個ifelse函數來遍歷數據幀中的許多列。 我想在數據幀中添加兩個變量“C03_only”和“only_c02_and_c09”。 我只專注於包含值的條目:“C02”,“C03”,“C09”。

示例數據:

mydf<- data.frame(id=1:4,
                  x1=c("A02", "C02", "C03", "M01"),
                  x2=c("B02", "", "C02", "C09"),
                  x3=c("C03", "C03", "C09", "C02") )

R>mydf
  id  x1  x2  x3
1  1 A02 B02 C03
2  2 C02     C03
3  3 C03 C02 C09
4  4 M01 C09 C02

新數據集應如下所示:

R>mydf
  id  x1  x2  x3 C03_only only_c02_and_c09
1  1 A02 B02 C03        1                0
2  2 C02     C03        0                0
3  3 C03 C02 C09        0                0
4  4 M01 C09 C02        0                1

我第一次嘗試這樣的事情

mydf$C03_only <- with(mydf,ifelse(x1 != "C02" | "C09" & x2 !="C02" | "C09" & x3== "C03",1,0))

哪個沒有用,但這個想法很糟糕,因為我有很多專欄,所以沒有跑步者。 同樣地,我厭倦了for loop

mydf$C03_only<-rep(0,nrow(mydf))
for (i in 2:nrow(mydf)){
  if (mydf$x1[i]!="C02" && mydf$x2[i]!="C09" && mydf$x3[i]=="C03"){
    mydf$C03_only[i]<-1}
}

這也沒有用,但(只是部分完成)足夠玩它,它可能會。

我認為最好的方法是使用apply函數但不能使它工作:

mydf$C03_only<- apply(mydf[,-1], MARGIN=1, FUN=function(x){ 
  ifelse(any(x == "C03") & any(x != "C09" & x != "C02") , 1, 0)
}
)

mydf$only_c02_and_c09<- apply(mydf[,-1], MARGIN=1, FUN=function(x){ 
  ifelse(any(x == "C02" & x == "C09") & any(x != "C03") , 1, 0)
}
)

這些很接近,但沒有雪茄。 我需要更換any東西但不確定是什么。 也許將感興趣的變量傳遞給向量並使用%in%運行一些條件語句,但我不確定如何。

任何建議都會很棒,謝謝。

我們可以按行應用條件。 注意:連接到paranthetical括號的加號強制從邏輯到數字。 示例: +(x)as.numeric(x)相同:

mydf$C03_only <- apply(mydf, 1, function(x) +(any(x=="C03") & all(x != "C02" & x != "C09")))
mydf$only_c02_and_c09 <- apply(mydf, 1, function(x) +(!any(x=="C03") & sum(x == "C02" | x == "C09") >= 2L))
mydf
#   id  x1  x2  x3 C03_only only_c02_and_c09
# 1  1 A02 B02 C03        1                0
# 2  2 C02     C03        0                0
# 3  3 C03 C02 C09        0                0
# 4  4 M01 C09 C02        0                1

暫無
暫無

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

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