#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 мехов.