Гистограмма в R при использовании двоичного значения - PullRequest
2 голосов
/ 04 октября 2010

У меня есть данные учеников из нескольких школ.Я хочу показать гистограмму процента всех учащихся, которые сдали тест в каждой школе, используя R. Мои данные выглядят так (идентификатор, школа, пройден / не сдан):

432342 школа1 пройдена

454233 School2 не удалось

543245 school1 не удалось

и т. Д.

(Дело в том, что меня интересует только процент студентов, которые сдали, очевидно, те, кто не сдалсдать не удалось. Я хочу, чтобы в каждой школе был один столбец, в котором указан процент учащихся этой школы, прошедших обучение.

Спасибо

Ответы [ 3 ]

2 голосов
/ 04 октября 2010

Мой предыдущий ответ не прошел весь путь. Вот повтор. Пример из ответа @ eyjo.

students <- 400
schools <- 5

df <- data.frame(
  id = 1:students,
  school = sample(paste("school", 1:schools, sep = ""), size = students, replace = TRUE),
  results = sample(c("passed", "failed"), size = students, replace = TRUE, prob = c(.8, .2)))

r <- aggregate(results ~ school, FUN = table, data = df)
r <- do.call(cbind, r) # "flatten" the result
r <- as.data.frame(cbind(r, sum = rowSums(r)))

r$perc.passed <- round(with(r, (passed/sum) * 100), 0)

library(ggplot2)

ggplot(r, aes(x = school, y = perc.passed)) +
  theme_bw() +
  geom_bar(stat = "identity")

enter image description here

2 голосов
/ 04 октября 2010

Есть много способов сделать это.один из них:

df<-data.frame(ID=sample(100),
school=factor(sample(3,100,TRUE),labels=c("School1","School2","School3")),
result=factor(sample(2,100,TRUE),labels=c("passed","failed")))

p<-aggregate(df$result=="passed"~school, mean, data=df)
barplot(p[,2]*100,names.arg=p[,1])
0 голосов
/ 04 октября 2010

Поскольку у вас есть индивидуальные записи (id) и вы хотите рассчитывать на основе индекса (школа), я бы предложил tapply для этого.

students <- 400
schools <- 5

df <- data.frame("id" = 1:students,
    "school" = sample(paste("school", 1:schools, sep = ""),
        size = students, replace = TRUE),
    "results" = sample(c("passed", "failed"),
        size = students, replace = TRUE, prob = c(.8, .2)))

p <- tapply(df$results == "passed", df$school, mean) * 100

barplot(p)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...