我有两个样本的 .csv 输出,并为每个样本计算了一些“计算器”统计数据。一些“计算器”具有关联的较低和较高置信区间值。最后,我想为所有计算器绘制箱线图,并为那些拥有误差线的计算器绘制置信区间。但首先,我需要将数据处理为 R 友好的格式。
我如何接受这个输入:
df <- data.frame(sample = as.factor(c("0.22um", "3um")),
nseqs = c(29445, 30212), coverage = c(0.96, 0.99),
invsimpson = c(20.36, 8.76), invsimpson_lci = c(19.99, 8.59),
invsimpson_hci =c(20.76, 8.95),
shannon = c(3.75, 3.04), shannon_lci = c(3.73, 3.02),
shannon_hci = c(3.77, 3.06))
看起来像这样:
sample nseqs coverage invsimpson invsimpson_lci invsimpson_hci shannon shannon_lci shannon_hci
1 0.22um 29445 0.96 20.36 19.99 20.76 3.75 3.73 3.77
2 3um 30212 0.99 8.76 8.59 8.95 3.04 3.02 3.06
并将其转换为:
sample calculator value lci hci
1 0.22um nseqs num <NA> <NA>
2 0.22um coverage num <NA> <NA>
3 0.22um invsimpson num num num
4 0.22um shannon num num num
5 3um nseqs num <NA> <NA>
6 3um coverage num <NA> <NA>
7 3um invsimpson num num num
8 3um shannon num num num
,其中 num 是 df 中的对应值。该数据框将具有 NA,其中原始 df 没有相应间隔的置信值
temp <- melt(df, id.vars= c("sample"), measure.vars=c("nseqs", "coverage", "invsimpson", "shannon"), variable.name="calculator")
partial.solution <- temp[with(base, order(group)), ]
将获取所有计算器的值,但让 lci 和 hci 保持一致有点棘手。
通用的解决方案会很棒。我期望矩阵具有数百个样本和可变数量的计算器。
感谢您的帮助!
最佳答案
我会分两步完成:
## put in the long format simple column using melt
## no need to work in all variables
xx = melt(df[,c(1,2,3,4,7)])
## use reshape to put in the long format column with lci and hci
yy = reshape(df[,c(1,5,8,6,9)],direction='long',
varying=list(c(2,3),c(3,4)),
times=c('invsimpson','shannon'),
sep="_", v.names=c("lci", "hci"))[,c('sample','time','lci','hci')]
然后合并 2 个结果
merge(xx,yy,by=1:2,all.x=T)
sample variable value lci hci
1 0.22um nseqs 29445.00 NA NA
2 0.22um coverage 0.96 NA NA
3 0.22um invsimpson 20.36 19.99 3.73
4 0.22um shannon 3.75 3.73 20.76
5 3um nseqs 30212.00 NA NA
6 3um coverage 0.99 NA NA
7 3um invsimpson 8.76 8.59 3.02
8 3um shannon 3.04 3.02 8.95
关于r - 堆叠三列组以及多个样本的均值和置信区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20793235/