veri çerçevesi sütunları mevcut İkisi arasında seçim Aşağıdaki veri kümesi vardır:Daha hızlı "EĞER" ifadesi geçici çözüm R
x <- 1000
df <- data.frame(a = sample(c("Jack", "Jill"), x, replace = TRUE),
b = sample(c("Bonnie", "Clyde"), x, replace = TRUE),
c = sample(c("blue", "green"), x, replace = TRUE))
Ben Seçtikleri df$a
alır yeni bir sütun denilen df $ seçim oluşturmak istediğinizde df$c == "blue"
ve df$c == "green"
olduğunda df$b
seçer. 1000 sadece 2 üzerinde saniyedir - x < zaman
choice <- function(y) {
nw1 <- df[y, ]
if(nw1$c == "blue") {
nw1$choice = nw1$a
} else {
nw1$choice <- nw1$b
}
print(nw1)
}
rows <- c(1:nrow(df))
df2 <- do.call("rbind", lapply(rows, function(y) choice(y)))
geçen zaman testi: bu durumda geleneksel if
ve ifelse
ifadelerle sınırlamaları anlama
, ben istenen görevi yerine aşağıdaki işlevi yarattı Ancak, x < - 25000 şişirildiğinde, geçen fonksiyon süresi makinemde 60 saniyenin üzerindedir.
Bu görevi hakkında gitmek için farklı bir yol önerisi var mı? Muhtemelen hile yapmak için farklı bir uygulama işlevi vardır, ama henüz çözmem gerekiyor.
'ifelse' vektörleştirildi; Eğer değilse, eskiden çok daha fazlasını görürsünüz. – alistaire
@rawr Yazma döngüleri yok, değil mi? Seviye sayısı ikiden fazla olduğunda daha anlamlı olan alternatifler vardır, ancak aksi takdirde 'ifelse' kısa ve hızlıdır. – alistaire