Назначьте значение прохождения / неудачи на основе среднего значения в большом наборе данных - PullRequest
4 голосов
/ 22 июля 2011

это может быть простой вопрос, но я надеялся, что кто-то может указать мне правильное направление. У меня есть образец набора данных:

dfrm <- list(L = c("A","B","P","C","D","E","P","F"), J=c(2,2,1,2,2,2,1,2), K=c(4,3,10,16,21,3,17,2))
 dfrm <-as.data.frame(dfrm)
 dfrm
  L J  K
1 A 2  4
2 B 2  3
3 P 1 10
4 C 2 16
5 D 2 21
6 E 2  3
7 P 1 17
8 F 2  2

Столбец J указывает тип переменной, которая определена в K. Я хочу иметь возможность взять среднее значение K, которому присваивается 1. В этом примере это будет 10 и 17

T = c(10,17)
mean(T)
13.5

Далее я хочу иметь возможность назначить рейтинг прохождения / неудачи, где pass = 1, fail = 0, чтобы определить, больше ли число в столбце K, чем среднее значение.

Окончательный набор данных должен выглядеть следующим образом:

cdfrm <- list(L = c("A","B","P","C","D","E","P","F"), J=c(2,2,1,2,2,2,1,2), K=c(4,3,10,16,21,3,17,2),C = c(0,0,0,1,1,0,1,0))
cdfrm <-as.data.frame(cdfrm)
 cdfrm
  L J  K C
1 A 2  4 0
2 B 2  3 0
3 P 1 10 0
4 C 2 16 1
5 D 2 21 1
6 E 2  3 0
7 P 1 17 1
8 F 2  2 0

это кажется таким простым, извините, ребята, я просто не знаю, о чем я думаю.

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

В решении есть два шага. Во-первых, необходимо вычислить среднее значение для интересующего вас значения. Другими словами, возьмите среднее значение для подмножества значений в вашем data.frame. R имеет удобную функцию для вычисления подмножеств, называемую subset. Вот оно в действии:

meanK <- mean(subset(dfrm, subset=J==1, select=K))
meanK
K 
13.5 

Далее вы хотите сравнить столбец K в вашем фрейме данных со средним значением, которое мы только что рассчитали. Это прямое векторное сравнение:

dfrm$Pass <- dfrm$K>meanK
dfrm
L J  K  Pass
1 A 2  4 FALSE
2 B 2  3 FALSE
3 P 1 10 FALSE
4 C 2 16  TRUE
5 D 2 21  TRUE
6 E 2  3 FALSE
7 P 1 17  TRUE
8 F 2  2 FALSE
0 голосов
/ 22 июля 2011

Вот как это сделать в одной строке

transform(dfrm, C = K > sapply(split(dfrm$K, dfrm$J), mean)[J])

split группирует значения K в соответствии со значениями J, а sapply(..., mean) рассчитывает средние значения по группам.

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