2015-01-27 3 views
0

У меня есть два кадра данных: один содержит список всех выборок (идентификатор образца, область и т. Д.) (Sampleid.df), а второй список счетчиков (obs.count) сделанных в каждом образце. Мне нужна таблица, в которой перечислены ВСЕ выборки и дается сумма для всех obs.measur (by sampleid) - кроме того, образцы, возвращающие не counts, должны получить 0. Я попытался объединить и слить, но разница в длительности была проблемой. Любые идеи/предложения очень ценятся.значения группы сумм на основе коэффициента из второго фрейма данных

sampleid.df <- data.frame(sampleid = 1:20) 
sampleid.df$sampleid <- as.factor(sampleid.df$sampleid) 

obs.count <- data.frame(counts = c(sample(1:50,15,rep=TRUE)), sampleid = c(sample(1:20,15,rep=TRUE))) 

ответ

1

Вы можете попробовать merge с опцией all=TRUE так, что выход («df1») будет иметь NA для «sampleids» от «sampleid.df», которые не имеют аналогов в той же колонке с «набл. рассчитывать». Затем используйте aggregate с опцией na.action=na.pass (по умолчанию опция na.action=na.omit) также включает строки NA. Используя na.rm=TRUE в пределах sum, удалите NAs, но если конкретный «sampleid» имеет только NA, он вернет NA.

df1 <- merge(sampleid.df, obs.count, all=TRUE) 
res <- aggregate(counts~sampleid, df1, sum, na.rm=TRUE, na.action=na.pass) 
res$counts[is.na(res$counts)] <- 0 
+0

работал для меня, как требуется, даже без использования последней строки. – doncarlos

+0

@doncarlos Рад узнать, что он сработал – akrun

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