Изменить: используются следующие пакеты: plyr
и vegan
. R — самая последняя версия.
Мои базовые данные таковы:
X1 = c('Archea01', 'Bacteria01', 'Bacteria02')
Sample1 = c(0.2,NA,NA)
Sample2 = c(0, 0.001, NA)
Sample3 = c(0.04, NA, NA)
df = data.frame(X1,Sample1,Sample2,Sample3)
df
X1 Sample1 Sample2 Sample3
1 Archea01 0.2 0.000 0.04
2 Bacteria01 NA 0.001 NA
3 Bacteria02 NA NA NA
Данные специально сделаны с помощью NA, чтобы отражать реальные данные.
Моя цель — суммировать частоту встречаемости бактерий/архей в каждом образце, что в идеале позволило бы создать такой тип фрейма данных:
Sample1 Sample2 Sample3
23 11 12
Мне удалось создать список частот:
dfFreq <- apply(df, 2, count)
Хотя это выглядит хорошо, это не совсем то, что я хочу:
head(dfFreq)[2]
$Sample2
x freq
1 0.000 23
2 0.001 5
3 <NA> 50
Следующим логическим шагом было бы преобразование списка в фрейм данных и частоту суммирования (или наоборот), но мой код не сработал. Я пытался:
df.data <- ldply (dfFreq, data.frame)
dfSUM <- apply(dfFreq, 2, sum)
Попытка суммировать список просто не сработала (что неудивительно). Что касается преобразования в фрейм данных, я просмотрел весь Stack Overflow и видел много предложений, предполагающих вышеизложенное или lapply
, но фрейм данных, созданный из предложенного кода, выглядит следующим образом:
x freq
Archea01 1
Bacteria01 1
etc etc
Это не то, чего я хочу.
Любые мысли о том, как либо A) суммировать частоту, а затем преобразовать в фрейм данных, подобный тому, который я хочу, либо B) преобразовать список в разумный фрейм данных, столбец частоты которого можно суммировать? Я думаю, что A - единственный способ добраться до того, что я хочу, но любые мысли по этому поводу будут очень признательны.
Изменить 2.0: Райан Мортон предложил следующий код:
require(dplyr)
dfBound <- rbind(dfFreq)
Что привело к этому фрейму данных:
X1 Sample1
dfFreq list(x = 1:1885, freq = c(1, 1, 1) list(x = c(1, 2, 3)
Хотя это, безусловно, кажется ближе к решению, я замечаю, что каждый список соответствует либо формату X1, либо формату Sample1 (x = c(1,2,3 и т. д.), что указывает на то, что в процессе обработки произошло что-то неправильное. привязка списков.
Любые идеи о том, почему это может не работать, и какое решение может быть для суммирования частоты, найденной в списке?
Спасибо большое.
count
не является базовой функцией R. Если вы используете какие-либо пакеты, укажите их явно или добавьте их тег. - person lmo   schedule 24.01.2017