【发布时间】:2017-07-11 16:13:56
【问题描述】:
我有一个背景数据文件和一个实验数据文件。我需要的是从背景文件中计算colMeans,并从实验数据中减去相应的平均背景读数。
这在base r中很容易:
dataField1 <- "someField"
dataField2 <- "someField2"
ctrlMeans <- colMeans (read.csv ("ctrl.csv"))
exprData <- read.csv ("expr.csv")
exprData [, c(dataField1, dataField2)] <- exprData [, c(dataField1, dataField2)] - ctrlMeans [c(dataField1, dataField2)]
但我发现最后一步很难在 dplyr 中实现。我能得到的最好的结果如下:
ctrlMeansTbl <- read_csv ('ctrl.csv') %>% summarize_all (mean)
exprDataTbl<- read_csv('expr.csv') %>% mutate (
dataField1 := !! quo (dataField1) - select (ctrlMeansTbl, !!quo (dataField1)),
dataField2 := !! quo (dataField2) - select (ctrlMeansTbl, !!quo (dataField2))
)
但这会引发错误:
Error in rep_len(as.vector(e1), prod(dim(e2))) :
attempt to replicate non-vector
为了清楚起见,ctrlMeansTbl 和 exprDataTbl(mutate 之前)的格式如下:
> head (ctrlMeansTbl)
# A tibble: 1 x 4
`someField1` `someField2` `someField3` `someField4`
<dbl> <dbl> <dbl> <dbl>
1 489.7096 74.24759 547.9139 16.0828
> head (donorSingle)
# A tibble: 6 x 4
`someField1` `someField2` `someField3` `someField4`
<dbl> <dbl> <dbl> <dbl>
1 132123.44 1560.74 166069.17 0.619378
2 11125.93 156.95 14045.20 0.620412
3 14590.51 243.82 18132.47 0.621446
4 76014.17 839.50 95961.42 0.623514
5 91344.17 1054.85 115226.85 0.627650
6 7651.86 146.73 9528.69 0.631786
有人对此有任何想法吗?谢谢!
【问题讨论】: