Получить количество для каждого фактора в одном столбце данных.таблица разбита на два других столбца

#r #data.table #lapply

#r #данные.таблица #lapply

Вопрос:

У меня есть data.table столбец, содержащий, DT$Locale

в ней есть следующие записи:

 DT[,unique(Locale)]

downstream                upstream                  intergenic                intron                    intron,nc                 regulatory                synonymous               
non_coding_exon,nc        5_prime_UTR               splice,5_prime_UTR        splice,intron             missense                  3_prime_UTR               splice,intron,nc         
splice,synonymous         splice_donor              synonymous,NMD            mature_miRNA              splice_donor,nc           splice_acceptor           3_prime_UTR,NMD          
stop_gained               missense,NMD              5_prime_UTR,NMD           intron,NMD                splice,intron,NMD         splice,non_coding_exon,nc missense,splice          
splice_acceptor,nc        coding_sequence,NMD       missense,splice,NMD       stop_lost                 initiator_codon           splice_acceptor,NMD
 

У меня также есть два других столбца, имеющих следующие форматы:

 DT[,unique(Cohort)]
[1] CEU   Lupus RA    YRI  RALoci

DT[,unique(Locus)]

 [1] 1.110927656.111927656  1.194335780.195335780  1.217775877.218775877  1.236880267.237880267  1.85471701.86471701    10.52963302.53963302   10.6118896.7118896    
 [8] 10.74879027.75879027   11.20046869.21046869   12.37676238.38676238   12.38077040.39077040   13.92438484.93438484   14.47539055.48539055   14.89244697.90244697  
[15] 14.98090299.99090299   14.98556636.99556636   15.101213744.102213744 15.47426024.48426024   16.13885034.14885034   16.27399400.28399400   16.48056833.49056833  
[22] 16.5898498.6898498     16.63172805.64172805   16.76469520.77469520   16.86513832.87513832   17.4148334.5148334     18.4824309.5824309     18.54958827.55958827  
[29] 2.146859650.147859650  2.229978358.230978358  2.86605444.87605444    20.19570642.20570642   22.39592645.40592645   3.41789975.42789975    3.7782962.8782962     
[36] 3.85190848.86190848    4.141037599.142037599  4.29959034.30959034    5.128060465.129060465  5.65898794.66898794    5.7513893.8513893      6.56405042.57405042   
[43] 7.124946062.125946062  8.18012618.19012618    9.28933416.29933416    9.87628311.88628311   
 

Я хочу получить количество типов каждой записи DT$Locale для каждой комбинации DT$Cohort и DT$Locus .

Мне показалось, что библиотека data.table представляет собой эффективный способ сделать это, поэтому я попробовал такие вещи, как:

DT[,sum(unique(Locale)),by="Locus,Cohort"] , но это возвращает ошибку — мне кажется, что, вероятно, есть простой способ сделать это с помощью lapply, но я еще не нашел правильного синтаксиса, может кто-нибудь предложить решение?

Примечание: в ответ на сообщения:

 RALociDT[,list(count=length(unique(Locale3))),by="Locus,Cohort"]
                     Locus Cohort count
  1: 1.110927656.111927656    CEU    14
  2: 1.110927656.111927656  Lupus    15
  3: 1.110927656.111927656     RA    14
  4: 1.110927656.111927656    YRI    13
  5: 1.194335780.195335780    CEU     4
 ---                                   
180:   9.28933416.29933416    YRI     4
181:   9.87628311.88628311    CEU    11
182:   9.87628311.88628311  Lupus    10
183:   9.87628311.88628311     RA     9
184:   9.87628311.88628311    YRI    11
 

Возвращает количество элементов в списке, которые появляются, а не количество раз, когда каждый из них появляется (по локусу и когорте).

Комментарии:

1. @David Arenburg — спасибо, что помогли мне отредактировать. Не могли бы вы помочь мне понять, что вы сделали и почему, чтобы я не повторял те же ошибки снова?

2. Всегда лучше показывать сообщение об ошибке, а также публиковать фактический набор данных с использованием dput . Но я предполагаю, что ошибка вызвана тем, что вы не можете суммировать uniques, поскольку это character вектор типа, а не числовой. Попробуйте DT[,length(unique(Locale)),by="Locus,Cohort"] , может быть?

3. Я предлагаю вместо описания того, как выглядят ваши данные, придумать небольшой воспроизводимый пример и представить желаемый результат для этого примера. Таким образом, вы получите гораздо лучшие ответы, а также уменьшите количество недопонимания, которое возникает, когда слова, которые вы произносите, не означают для вас то же самое, что и для других.

Ответ №1:

Попробуйте DT[,list(count=length(unique(Locale))),by=c("Locus","Cohort")]

Попытка получить sum уникальные значения локали, когда вам нужен length вектор уникальных значений.

Комментарии:

1. Во-первых, этот синтаксис действительно работает: by=»Locus,Cohort», А также length(Unique(Locale))) возвращает количество элементов в списке по когорте и местоположению … но я хочу, чтобы каждый раз появлялся, а не сколько их появляется. Большое спасибо за ваш ответ

2. ваш желаемый результат неясен. Пожалуйста, опубликуйте пример того, как должен выглядеть желаемый результат.

Ответ №2:

Вы сбили людей с толку, не объяснив разницу между «количеством раз, когда каждый появляется» и «сколько их появляется». Для большинства из нас это звучит как одно и то же. Возможно, вы просто хотите добавить Locale к вектору группировки:

  DT[, table(Locale, Locus, Cohort)]
 

Таким образом, будет подсчитано, сколько раз каждый Locale тип появляется в каждом локусе и когорте, в которых есть какой-либо представитель.