用dplyr标准化和过滤长矩阵

问题描述 投票:0回答:1

我喜欢学习dplyr然而,仍然做不到基本的东西。

基本上,我想规范化数据(将条目除以行的总和)

messy <- data.frame(o1 = c(1,2,1,2),
                    o2 = c(2,3,0,1),
                    o3 = c(3,2,0,1),
                    o4 = c(1,1,4,4))
normalized.messy = messy/apply(messy,1,sum)

然后我想识别这样的列

apply(normalized.messy,2,sum)/sum(apply(normalized.messy,2,sum))

我做了类似以下的事情

messy <- data.frame(samples = c("s1", "s2", "s3", "s4"),
                o1 = c(1,2,1,2),
                o2 = c(2,3,0,1),
                o3 = c(3,2,0,1),
                o4 = c(1,1,4,4))

bb = gather(messy, otu, counts, o1:o4)
group_by(bb, otu) %>% mutate(nr = scale(count))
bb.nr = group_by(bb, otu) %>% mutate(nr = scale(count))

但得到以下错误,

Error: cannot coerce type 'closure' to vector of type 'any'

我很感激纠正缩放部分以及过滤

r dplyr bigdata sparse-matrix
1个回答
0
投票

为了解决您遇到的错误,我怀疑这是因为您将列数命名(带有s)而不是仅计数。

至于你的dplyr代码,我认为你有第一组向后。这是我对你想要的东西的理解。首先,您希望按样本分组以获得每个样本的OTU比例,然后您希望按OTU分组以获得样本间的平均OTU比例:

messy <- data.frame(samples = c("s1", "s2", "s3", "s4"),
            o1 = c(1,2,1,2),
            o2 = c(2,3,0,1),
            o3 = c(3,2,0,1),
            o4 = c(1,1,4,4))
bb <- gather(messy, otu, counts, o1:o4)

bb %>% group_by(samples) %>% mutate(prop = counts/sum(counts)) %>%
       group_by(otu) %>% summarize(mean(prop))
© www.soinside.com 2019 - 2024. All rights reserved.