데이터를 재구성/축소하려고합니다. 지금까지 나는 (매우 느린) for
루프를 사용했지만, 내가 인식 한 것으로부터 이것은 Plyr
으로 매우 빠르다.조건으로 데이터 서브 세트하기
나는 많은 그룹 (기업, 데이터 세트의 요소)을 가지고 있으며 그 회사의 모든 셀에 value
에 대해 0 항목을 표시하는 모든 회사를 완전히 포기하려고합니다. 따라서 새로운 data.frame
을 만들지 만 어느 시점에 value
에 대해 0을 표시하는 모든 그룹을 제외하십시오.
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
기능을 사용할 수 있습니까?
편집 : 문제를 재현하기 위해 BenBarnes에서 제안한대로 데이터 생성이 추가되었습니다. 벤, 정말 고마워. 또한 아래에 제공된 답변을 준수하도록 내 코드가 변경되었습니다.
하지만,이 '['연산자를 사용하여 표준 서브셋처럼 들린다. – Andrie
@Andrie 어떤 항목이 어떤 조건을 충족시키는 그룹의 모든 항목을 삭제하려는 것처럼 들리는군요. 그래서'plyr' 또는'by'가 더 쉬워 보인다. 1 월, 질문을 해결하는 데 도움이 될 것입니다. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –
답변 해 주셔서 감사합니다. Ben이 제안한대로 게시물을 편집하고 데이터 재생산을 추가했습니다 (아래 참조). – Jan