#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
тип появляется в каждом локусе и когорте, в которых есть какой-либо представитель.