计算R中的平均配对差异

时间:2014-02-18 09:01:47

标签: r

我有100万行的清单。

chr_position sick1 sick2 ... sick14 control1 control2 ... control14 p-value
chr1_1231 87.8 100 96.1 89.5 NA NA 93.8 95.7 95.5 92 NA 100 90.9 NA 100 NA 94.3 90.6 NA 92.5 100 86.7 NA NA 86.4 84.2 NA 90 0.844
chr2_412 96.1 NA 90.5 98 95.8 95.2 100 NA NA 97.5 NA 100 100 NA 100 98.5 NA 100 NA 100 100 93.6 NA 100 NA NA 93.3 NA 0.59
...

我希望计算每行的(sick1与control1)...(sick14与control14)的平均配对差异。

理想情况下,我想要输出

chr_position pair1diff pair2diff ... pair14diff count_of_valid_pairs paired_diff

我意识到这是一个简单的excel问题,但是由于行数很多,在excel上执行是不可行的。我试着简单地搜索,但我不认为combn适用。谢谢你的任何建议。

2 个答案:

答案 0 :(得分:0)

如果您的列是一致且相邻的,则可以使用向量数学减去它们。这是一个例子(我只合成了1:4的数据而不是1:14,但是你明白了)只需将abs(df[,2:5]-df[,6:9])位改为abs(df[,1:15]-df[,16:29])

df<-data.frame(chrposition=sample(LETTERS,1000,T),
sick1=runif(1000),
sick2=runif(1000),
sick3=runif(1000),
sick4=runif(1000),
control1=runif(1000),
control2=runif(1000),
control3=runif(1000),
control4=runif(1000),
pval=0.9+(runif(1000)*0.1))


new.df<-cbind(chrposition=df$chrposition, 
              abs(df[,2:5]-df[,6:9]),   # vector diff between cols 2-5 and 6-9
              pval=df$pval)

head(new.df)

  chrposition      sick1      sick2     sick3      sick4      pval
1           O 0.21122616 0.28441462 0.4917417 0.06320374 0.9119544
2           I 0.15434718 0.07624787 0.6844081 0.19595290 0.9494703
3           A 0.03824239 0.63021683 0.2989420 0.59546995 0.9529900
4           M 0.55047434 0.11957975 0.5392134 0.05878512 0.9140963
5           H 0.20543950 0.48312551 0.1006623 0.34576621 0.9461521
6           R 0.74644532 0.12232382 0.1352527 0.67883728 0.9465176

答案 1 :(得分:0)

这在R

中实际上非常简单

例如:

# Generate some data
data <- matrix(rnorm(28*10000), ncol=28)
colnames(data) <- c(paste0("sick", 1:14), paste0("ctrl", 1:14))

diffs <- data[,1:14]-data[,15:28] 

当然,您应该根据数据结构更改列索引。

相关问题