2015-02-07 17 views
11

RI, aşağıdaki örnekte olduğu gibi bir if deyiminde bir benzerlik yapmak ister. Burada, kırmızı kelimeyi içeren ve yeni bir değişken ayarlayan $ color sütunundaki herhangi bir renkte arama yaptığım veri çerçevesinde karıştırmak için kırmızı renk.R if ifadesinde nasıl kullanılır?

mix$newcolor <- if(grep("Red",mix$color) "red"

Ve burada dataframe karışımı için bazı örnek veri:

Uyarı mesajı:

AliceBlue blueviolet DarkRed bu hata mesajını alıyorum

MediumVioletRed : İçinde (grepl ("koyu kırmızı"), $ co karıştırın lor) == TRUE) "kırmızı": koşul vardır uzunluğu> 1 ve o kabul edilebilir ama bu yüzden grepl bir DOĞRU veya FALSE değeri dönen gerektiğini düşünüyorum

sadece ilk unsur kullanılacak bir şey (veya çok) eksik.

Yardımlarınız için teşekkürler. Bu görev için if veya ifelse gerekmez

> color = c("AliceBlue", "BlueViolet", "DarkRed", "MediumVioletRed") 
> ifelse(grepl("Red",color),"red","other") 
[1] "other" "other" "red" "red" 
+3

Normalse ve başkaları yerine vektörize edilmiş "ifelse" ye ihtiyacınız var. Ayrıca grepl kullanırken == true değerine de ihtiyacınız yoktur. –

+0

Evet, bu bir şampiyon gibi çalıştı. Daha önce ifelse kullanmayı düşünmüştüm ama başka bir parçaya yığılmıştım ama sadece yeni bir karışımı karıştırıyorum. Boş ya da dönüştürülmüş bir değere sahip olacak. Teşekkürler. – Jazzmine

+1

ifelse'nin bir avantajı, onları kolayca yerleştirebilmenizdir. Renk vektörünüzü "saf" renklere dönüştürmek istediğinizi varsayalım: 'renk = c (" AliceBlue "," BlueViolet "," DarkRed "," MediumVioletRed "," DarkGreen "); ifelse (grepl ("kırmızı" "Kırmızı", renk), ifelse (grepl ("Yeşil", renk), "yeşil", ifelse (grepl ("Mavi", renk), "mavi",) "öteki")) – xraynaud

cevap

14

Eğer grepl ve ifelse deyimi kullanabilirsiniz. Sen sub kullanabilirsiniz:

color <- c("darkred", "indianred", "violetred", "deep red", 
      "Orange Red", "blue", "yellow") 

sub(".*red.*", "red", color, ignore.case = TRUE) 
# [1] "red" "red" "red" "red" "red" "blue" "yellow" 

sub komut alt dize "red" ile "red" dahil tüm dizeleri yerini alır. Ayrıca, üst ve küçük eşleşmeler için ignore.case = TRUE belirtmiştim.

+0

Teşekkürler, esas olarak hangi belge disiplini sağladı ama örnek kod ile. – Jazzmine

3

:

İlgili konular