# R Lab — Ders 3 | Filtreleme ve gruplu özetler

Bağımsız özel ders öğrenci çalışma kâğıdı. Resmî UCL ders içeriği değildir. Veriler tamamen kurgusal; R base kurulumu yeterlidir. **90 dakika**, Ders 2'nin aynı 12×4 CSV dosyası.

## 00–10 dk · Geri çağırma
- RStudio'da `getwd()` ne gösterir?
- Neden `d$quiz_score >= 70` testi tek başına güvenli olmayabilir?
- Grup büyüklüğü ve ortalamaya giren geçerli puan sayısı aynı olmak zorunda mı?

## 10–25 dk · Güvenli filtreleme
```r
d <- read.csv("data/class_synthetic.csv",
              na.strings=c("","NA"), stringsAsFactors=FALSE)
d$group <- factor(d$group, levels=c("A","B"))
high <- d[!is.na(d$quiz_score) & d$quiz_score >= 70, ]
high[,c("student_id","quiz_score")]
```
**Görev 1:** Sadece B grubundan, puanı bilinen kayıtları seç. **Görev 2:** Puanı 75'ten büyük olan kayıtların ID'lerini listele.

## 25–40 dk · Gruplar
```r
table(d$group)
prop.table(table(d$group))
```
**Görev 3:** A ve B'nin tüm CSV içindeki sayısını ve oranını yorumla; bu sayıların ortalama hesabındaki `n` ile farklılaşabileceğini açıkla.

## 40–60 dk · Gruplu özetler
```r
tapply(d$quiz_score, d$group, mean, na.rm=TRUE)
aggregate(quiz_score ~ group, data=d, FUN=mean)
```
**Görev 4:** Sonuçların veri tipini ve gösterimini `class()` ve `str()` ile karşılaştır.
**Görev 5:** A ve B gruplarında puanı **bilinen** kaç kişi olduğunu `tapply()` ile belirle.
**Görev 6:** Her grupta puanı 70 veya üstü olanların *geçerli puanlara göre* oranını hesapla. Payda tercihini açıklayabilmelisin.

## 60–73 dk · Complete case ve örneklem farkı
```r
ok <- complete.cases(d[,c("study_hours","quiz_score")])
complete_data <- d[ok, ]
tapply(complete_data$quiz_score, complete_data$group, mean)
```
**Görev 7:** B grubunun yalnız puan üzerinde hesaplanan ortalamasıyla iki değişkende tam kayıt gerektiren ortalama arasındaki fark neden oluşur? Kodla göster.

## 73–83 dk · Grafik
```r
means <- tapply(d$quiz_score,d$group,mean,na.rm=TRUE)
barplot(means, ylim=c(0,100),
        xlab="Group",ylab="Mean quiz score",
        main="Synthetic group means")
```
**Görev 8:** Bu grafik dağılım ve belirsizlik açısından neyi göstermiyor? Yakın ortalamalar iki grubun eşdeğer olduğunu kanıtlar mı?

## 83–90 dk · Bağımsız çıkış bileti
1. `tapply` ile `aggregate` arasındaki kullanışlılık farkını açıkla.
2. A grubunun tüm kayıt sayısı ile geçerli puan sayısının farklı olmasını açıkla.
3. `na.rm=TRUE` ile complete-case filtreleme birbirinin tam karşılığı mıdır?
4. Kodunu baştan çalıştır, iki cümlelik İngilizce sınırlılık notu yaz.

**Ev ödevi:** `group, valid_n, mean_score` sütunlarından oluşan bir özet tablo yaz; bir `NA` yerini kopyada değiştirip özetin nasıl değiştiğini açıkla. Sonraki derse sakla.

**Veri etiği:** Gerçek öğrenci kayıtlarını kullanma. Öğretmen çözüm anahtarı bu açık pakette yer almaz.
