Как повторить эту функцию в R много раз?

#r

#r

Вопрос:

Мне нужно повторить следующую функцию много раз, используя разные элементы. Я очень новичок в R, и единственный известный мне способ — это копировать-вставить. Мне нужно вычислить пропорцию, которую каждая программа представляет в своей области, исключая «Неопределенную» область. И мне нужны пропорции каждой области, сохраненные в отдельном списке или векторе для дальнейших вычислений.

 df2 = data.frame (area=rep(c("Eng", "Hum"),each=3), program=c("Chem", "Mech", "Undecided","Hist", "Law", "Undecided"))
df2
  area   program
1  Eng      Chem
2  Eng      Mech
3  Eng Undecided
4  Hum      Hist
5  Hum       Law
6  Hum Undecided
p.Mech = sum(program=="Mech" amp; area=="Eng") / (sum(area=="Eng")- sum(program=="Undecided" amp; area=="Eng"))
p.Chem = sum(program=="Chem" amp; area=="Eng") / (sum(area=="Eng")- sum(program=="Undecided" amp; area=="Eng"))
p.Hist = sum(program=="Hist" amp; area=="Hum") / (sum(area=="Hum")- sum(program=="Undecided" amp; area=="Hum"))
p.law = sum(program=="Law" amp; area=="Hum") / (sum(area=="Hum")- sum(program=="Undecided" amp; area=="Hum"))
  

В моих реальных данных у меня есть 9 областей и около 5 программ для каждой области.
Это мой первый пост на stack.exchange, так что извините, если вопрос слишком глупый или здесь не место. Надеюсь, кто-нибудь может помочь.

Ответ №1:

Я бы, вероятно, просто сделал следующее. Удалите неопределенные записи, подсчитайте результаты по программе и области и рассчитайте пропорции по области.

 df2= data.frame (area=rep(c("Eng", "Hum"),each=3), program=c("Chem", "Mech", "Undecided","Hist", "Law", "Undecided"))

library(data.table)
library(magrittr)
dt2 <- as.data.table(df2)  # just converting to a data.table
dt2 %>%
  .[program != "Undecided"] %>%
  .[, .N, keyby = .(area, program)] %>%
  .[, P := N / sum(N), keyby = "area"] %>%
  .[]  # just for displaying
#>    area program N   P
#> 1:  Eng    Chem 1 0.5
#> 2:  Eng    Mech 1 0.5
#> 3:  Hum    Hist 1 0.5
#> 4:  Hum     Law 1 0.5
  

Создано 2019-03-12 пакетом reprex (версия 0.2.1)

Комментарии:

1. Спасибо! Но как я могу использовать пропорции для дальнейших вычислений? Допустим, я хочу создать выборку из 100 студентов английского языка, которая в этом случае будет состоять из 50 химиков и 50 мехов.