저는 대학생으로서 R을 시험하기 시작했습니다. 막연한 제목으로 불편을 끼쳐 드려 죄송합니다.이 게시물과 관련된 많은 질문이 있습니다.R - 샘플링에서 얻은 빈도 막대 그래프 : 효율 등
남성 (M) 또는 여성 (F) 인 인구를 샘플링하는 문제가 발생했습니다. 이 인구에서 남성과 여성의 수를 취할 수있는 함수를 정의한 다음 sample.number
크기의 샘플을 sample.size
으로 만들고 관련 빈도와 함께 샘플의 전체 크기에 대한 여성의 샘플 비율을 포함하는 데이터 프레임을 반환합니다.
나는이 작업을 수행 할 수있는 간단하고 잘 최적화 된 방법이 확실 해요,하지만 난 (거의) 작동하는 작은 함수를 작성했습니다 :
senators <- function(Fem = 13,
Mal = 87,
sample.size = 10,
sample.number = 100){
pop <- c(rep("F", Fem), rep("M", Mal)) # I create the population base
popsa <- list(NA) # I make some empty variables used later
popsa.factor <- list(NA) # Not sure if this passage is even needed...
popsa.proportion <- list(NA)
가 여기에
for
루프를 제공합니다. 난 그걸 읽고
for
루프 정말 비효율적 인 방법입니다 읽었습니다. 더 좋은 방법이 있습니까? I는 샘플
popsa
리스트의 각 요소에 할당함으로써 시작
for(i in 1:sample.number){
popsa[[i]] <- sample(pop, sample.size, replace = TRUE)
popsa.factor[[i]] <- table(factor(popsa[[i]], levels = c("M", "F")))
popsa.proportion[[i]] <- popsa.factor[[i]][2]/sample.size
}
후 I는 각각의 샘플에서 테이블을 만들고 popsa.factor
에 저장하는 popsa
를 사용한다. 그런 다음 여성의 비율을 계산하여 popsa.proportion
에 저장합니다. 이 for
루프는 나에게 지저분 해 보입니다. 그리고 많은 샘플을 처리하는 속도가 정말 느립니다. 내가 여기서 한 일을 더 효율적이고 효과적으로 수행 할 수있는 방법이 있습니까?
popsa.unlisted <- unlist(popsa.proportion)
popsa.frequency <- table(popsa.unlisted)
popsa.frame <- data.frame(Level = as.numeric(names(popsa.frequency)),
Freq = as.numeric(popsa.frequency))
return(popsa.frame)
} # This closes the function call
popsa.frequency
로 저장, 주파수를 얻기 위하여 각 벡터에 비례하고, 테이블 값들을 얻을 popsa.proportion
를 I 다음 올라가지. 이제 popsa.frequency
을 popsa.frequency
의 이름을 부정하고 변환하여 데이터 프레임의 첫 번째 열로 저장하여 데이터 프레임에 넣으려고합니다. 그런 다음 함수는 popsa.frame
을 반환합니다.
popsa.frame
은 여전히 첫 번째 열 (Level
)에 popsa.frequency
의 요인 속성을 전달합니다. 이걸 어떻게 바꿀 수 있니? 해야합니까?
이들은 표본 분포의 빈도이기 때문에 hist()
은 숫자 벡터 만 허용하기 때문에이 데이터 프레임에서 막대 그래프를 만들고 싶습니다. 따라서 popsa.frame
은 유효한 개체가 아닙니다. plot(popsa.frame)
은 내가 원하는 것보다 더 많거나 적은 것을 반환합니다. 어떻게 그러한 막대 그래프를 만들 수 있습니까?
편집 : 아래 표시된 대답에 따라 기능을 만드는 데이터 프레임을 hist()
이 실제로 주파수 막대 그래프를 만드는 데 사용할 수있는 객체로 변환하는 방법을 알아 냈습니다 (막대 그래프를 사용하면 더 많은
result <- senators(Fem=13,Mal=87,sample.size=50,sample.number=10000)
raw <- sapply(1:length(result$Level), function(x){
rep(result$Level, result$Freq)
})
hist(raw)
그래서 'data.frame'의 각 열에 대해 히스토그램을 만들고 싶습니까? – patL
정확하게는 아니지만, 하나의 막대 그래프를 만들고 싶습니다. 여기서 "y"축은 주파수이고 "x"축은 비율 값입니다. @patL [This] (https://i.imgur.com/pgSRKX9.png)와 비슷하지만 막대 그래프의 열이 있습니다. –