2016-04-10 3 views
0

У меня есть кадр данных, который выглядит какКак получить частоту элемента в строке в фрейме данных r?

GeneID person1 person2 ... person100 homo1 homo2 heter homo1count homo2count hetercount 
1  AA  AC   AA   AA CC AC  25   50  25 
2 ..... 
3 ..... 

Как я могу получить количество 25, 50, 25?

я пытался использовать в качестве применить

g <- function(df, AA) { 
    x = table(df) 
    AA = x[which(names(x) == df$homo1)] 
    } 
x = apply(temp,1,g) 

Но это не сработало, ФР $ homo1 всегда список

Спасибо!

+1

Что вы пытаетесь получить? Вектор счетчиков в строке 1 или переменные со счетами? Для первого: vecCount <- df [1, c ("homo1count", "homo2count", "hetercount")] '. Для второго: 'dfCount <- df [, c (" homo1count "," homo2count "," hetercount ")]'. Кроме того, рассмотрите только один оператор присваивания в вашем коде '<-' или' = '. – lmo

+0

Я хочу рассчитать, сколько AA, CC, AC кумулятивно среди 100 человек. –

+0

Но точный шаблон строки определяется homo1, homo2, heter, т. Е. Следующая строка может быть CC, GG, CG; строка 3 может быть AA, TT, AT –

ответ

2

Это проще, если вы сначала отформатируете длинный формат, а затем запишите. Что-то вроде этого:

require(reshape2) 
require(dplyr) 

g <- c('AC', 'AA', 'CC') 
n <- 30 

df <- data.frame(gene_id=1:30, person1=sample(g,n,replace=TRUE), 
           person2=sample(g,n,replace=TRUE), 
           person3=sample(g,n,replace=TRUE), 
           person4=sample(g,n,replace=TRUE), 
           homo1=sample(g,n,replace=TRUE), 
           homo2=sample(g,n,replace=TRUE), 
       stringsAsFactors=FALSE) 

df %>% melt(c("gene_id", "homo1", "homo2")) %>% 
     group_by(gene_id) %>% 
     summarise(homo1count=sum(homo1==value), 
       homo2count=sum(homo2==value)) %>% 
     merge(x=df) 

EDIT: Пример вывода:

gene_id person1 person2 person3 person4 homo1 homo2 homo1count homo2count 
1  1  AA  CC  AC  AA AC CC   1   1 
2  2  AC  AA  CC  CC CC AA   2   1 
3  3  AC  CC  CC  AA CC AA   2   1 
4  4  AC  AC  AC  AA AA AA   1   1 
5  5  CC  AC  AA  AC AA AC   1   2 
6  6  CC  AC  CC  CC AA AA   0   0 
7  7  AA  AA  AC  AA CC CC   0   0 
8  8  AA  AC  AA  CC AC CC   1   1 
+0

Спасибо за ответ! Моя проблема в том, что homo1 отличается от каждой строки. –

+0

homo1 отличается в каждой строке моего ответа. Я не понимаю, о чем вы спрашиваете. –

+0

homo1count - это счетчик «XX», появившийся в homo1 colume в этом конкретном ряду –

Смежные вопросы