2015-05-12 3 views
0

Я пытаюсь написать цикл в R для следующего. У меня есть dataframe dfLooping in R сделано автоматически

Reads Counts 
aaa  1 
bbb  20 
ccc  3 

и так далее. Я хочу получить dataframe, который подсчитывает количество чтений, которые меньше или равны определенному значению count. Например, есть 3 чтения с графами < = 100 и 2 с отсчетами < = 10. Ожидаемый результат

Counts number_reads 
100  3 
10  2 
1  1 

и так далее. Сейчас я делаю это вручную с помощью

nrow(df[which(df$Counts<=100),]) 

и так далее. Можете ли вы предложить редактирование, в котором я могу получить ожидаемый результат автоматически, чтобы увеличивать счетчики с шагом в 10 (100, 90, 80 и т. Д.). Thanks

+0

Может быть вам нужно '' cut' с table' т.е. 'таблицы (вырезать (DF $ COUNTS, брейков = (SEQ 10100, по = 10))) ' – akrun

+0

Спасибо, это было полезно. Можно ли каким-либо образом построить результат таблицы? – Ssank

+2

'plot (.. table ...)' работает для этого – Frank

ответ

3

cut ставит значения в бункеры. table подсчитывает эти значения. cumsum даст вам кумулятивную сумму до желаемого уровня.

> Counts <- c(1, 20, 3) 
> cut(Counts, c(0, 10, 100)) ## Or, I guess, cut(Counts, c(0, 1, 10, 100) 
[1] (0,10] (10,100] (0,10] 
Levels: (0,10] (10,100] 
> table(cut(Counts, c(0, 10, 100))) 

    (0,10] (10,100] 
     2  1 
> cumsum(table(cut(Counts, c(0, 10, 100)))) 
    (0,10] (10,100] 
     2  3 

Изменение второй аргумент cut, чтобы соответствовать брейки вас интересует.


Подобно cut будет findInterval.

4

В статистике частота X, меньшая порога, называется эмпирической функцией распределения : ecdf для краткости.

В вашем случае вам нужно увеличить на n, чтобы преобразовать частоту в число.

Использование данных сна:

> nrow(sleep) * ecdf(sleep$extra)(5:-2) 
[1] 19 17 14 14 10 6 2 0 

, который говорит, что есть 19 случаев, когда дополнительные меньше, чем 5, 17 меньше, чем 4, и так далее.

В вашем случае, вы можете иметь

nrow(df) * ecdf(df$Counts)(c(100,10,1)) 
+0

Это гораздо приятнее ответить .... +1 – A5C1D2H2I1M1N2O1R2T1