Binning столбец и получение соответствующих значений из другого столбца в R - PullRequest
0 голосов
/ 25 марта 2012

У меня есть два столбца парных значений во фрейме данных, я хочу объединить данные в один столбец, используя функцию cut2 из пакета Hmisc , чтобы в каждом бине, по крайней мере, 25 точек данных. Однако мне нужны соответствующие значения из другого столбца. Есть ли удобный способ для этого с помощью R? Я должен поменять столбец B.

A           B
-10.834510  1.680173
11.012966  1.866603
-16.491415  1.868667
-14.485036  1.900002
2.629104  1.960929
-3.597291  2.005348
.........

1 Ответ

0 голосов
/ 25 марта 2012

Непонятно, что вы подразумеваете под "соответствующими значениями другого столбца". Первую часть легко выполнить с помощью аргумента g (# of groups):

dfrm$Agrp <- cut2(dfrm$A, g=trunc(length(dfrm$A)/25) )

Вы можете агрегировать средние или средние значения B в Agrp, используя tapply или ave или одну из сводных функций Hmisc. В одном из сегодняшних вопросов есть несколько проработанных примеров: Как получить Сводную статистику по группе , а также много других примеров использования этих функций или aggregate или функций pkg: plyr.

Учитывая, что число значений B не обязательно будет постоянным в разных группах, я могу подумать, что для доставки отдельных значений по A-grouped-value будет split. Я добавил дополнительную строку, чтобы проиллюстрировать, что для неравномерного разбиения может потребоваться вернуть список, а не более «прямоугольный» объект:

dat <- read.table(text="A           B
 -10.834510  1.680173
 11.012966  1.866603
 -16.491415  1.868667
 -14.485036  1.900002
 2.629104  1.960929
 -3.597291  2.005348\n 3.5943 3.796", header=TRUE)
 dat$Agrp <- cut2(dat$A, g=trunc(length(dat$A)/3) )
 split(dat$B, dat$Agrp)
 #-----    
$`[-16.49, 2.63)`
[1] 1.680173 1.868667 1.900002 2.005348

$`[  2.63,11.01]`
[1] 1.866603 1.960929 3.796000

Если вы хотите, чтобы вектор значений, по которым проводилось разбиение, мог быть выполнен с помощью регулярного выражения в levels(dat$Agrp).

...