r - 堆叠三列组以及多个样本的均值和置信区间

标签 r dataframe data-manipulation

我有两个样本的 .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/

相关文章:

performance - 数据帧子集性能

r - 在模拟中以长格式或数组格式存储数据

sql - Rmarkdown - 使用表名作为动态 sql block 中的变量?

r - 创建新的数据框,其中变量在特定时期内每年增长

python - 按多列查询数据框?

r - 如何根据满足的条件和时间顺序对 r 中的数据进行排序?

r - 永久保留SQLite中的更改

python - 从 DataFrame 中选择属于同一系列的行的最后一次观察

用于从文本中剪切列的 Windows 命令

python - 用多个变量替换 pandas 中的多列