У меня есть набор данных, который должен быть закрыт/обрезан и т. Д. На основе значений из другого набора данных. Оба набора данных имеют одинаковую структуру (имена столбцов и т. Д.).Как векторизовать эту операцию замены?
Что такое быстрый способ применения преобразований, хранящихся в другом наборе данных, к текущему набору данных?
Образец данных:
#generate sample data & set some values to NA
#this is the dataset that has variables that need to be trimmed
x1 <- data.frame(a=rep(11:20), b=rep(41:50))
x1[2,1] <- NA
x1
#a vector containing values to trim to (in this case, say 75th percentile)
y1 <- apply(x1, 2, function(x) quantile(x, 0.75, na.rm=T))
y1
#I am doing this inside a loop
for (i in 1:ncol(x1)){
x1[is.na(x1[[i]]),] <- y1[i] #if missing, set to some value
x1[x1[[i]] > y1[i], i] <- y1[i] #if larger than 75th pctl, set to some value
}
x1
Я уверен, что есть более быстрый Векторизованных способ сделать это. Я бы очень признателен за любые материалы.
Да, вам нужно «SIMPLIFY = FALSE», или некоторые столбцы могут быть преобразованы в другой тип. Также обратите внимание, что 'as.data.frame (mapply (..., SIMPLIFY = FALSE))' эквивалентно более короткому 'as.data.frame (Map (...))'. – flodel
Я всегда забываю о 'Карте' и' Сокращении'! – Justin
Это прекрасно. Спасибо @Justin – user3053307