Я пытаюсь изменить/уменьшить свои данные. До сих пор я использую цикл for
(очень медленный), но из того, что я воспринимаю, это должно быть довольно быстро с Plyr
.Подмножество данных по условию
У меня есть много групп (фирм, как фактор в наборе данных), и я хочу полностью отказаться от каждой фирмы, которая показывает 0 записей для value
в любой из этих фирм. Таким образом, я создаю новый data.frame
, но в некоторых случаях все группы покажут 0 для value
.
for
петля:
Data Creation:
set.seed(1)
mydf <- data.frame(firmname = sample(LETTERS[1:5], 40, replace = TRUE),
value = rpois(40, 2))
-----------------------------
splitby = mydf$firmname
new.data <- data.frame()
for (i in 1:(length(unique(splitby)))) {
temp <- subset(mydf, splitby == as.character(paste(unique(splitby)[i])))
if (all(temp$value > 0) == "TRUE") {
new.data <- rbind(new.data, temp)
}
}
Delete all empty firm factors
new.data$splitby <- factor(new.data$splitby)
Есть ли способ добиться того, что с plyr
пакета? Можно ли использовать в этом контексте функцию subset
?
EDIT: В целях воспроизведения проблемы добавлено создание данных, как предлагается BenBarnes. Бен, спасибо за это. Кроме того, мой код изменен, чтобы соответствовать приведенным ниже ответам.
Вы не предоставляют образцы данных, но это звучит как стандартное подмножество с помощью '[' operator. – Andrie
@ Аndrie это звучит для меня, как будто он хочет отбросить все записи в группе, в которой любая запись соответствует некоторому условию. Так что 'plyr' или' by' кажутся проще. Ян, пожалуйста, прочитайте это, так как это поможет нам решить ваш вопрос: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –
Большое спасибо за ваши ответы! Я отредактировал сообщение и добавил воспроизведение данных, как это предложил Бен (см. Ниже). – Jan